为了账号安全,请及时绑定邮箱和手机立即绑定

求助一个数组操作问题

求助一个数组操作问题

摇曳的蔷薇 2018-09-11 09:14:01
我有一个数组需要将其反转,下面是列子,需要注意的最大值4的位置不能变,然后将最大值前面与后面的值分别重新倒置编排进去,数学不太好,求助大家帮忙var arr = [1, 0, 4, 3, 2];反转为var arr = [2, 3, 4, 0, 1];var arr = [0, 4, 3, 2, 1];反转为var arr = [3, 4, 0, 1, 2];var arr = [4, 3, 2, 1, 0];反转为var arr = [4, 0, 1, 2, 3];var arr = [3, 2, 1, 0, 4];反转为var arr = [0, 1, 2, 3, 4];
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

这个其实很简单的,以空间换时间,先翻转,然后连拼3个,再计算之前的最大值所在的位置,进行新数组的切割。

最大的性能消耗在getmax上。

var test = [

  [1, 0, 4, 3, 2],

  [0, 4, 3, 2, 1],

  [4, 3, 2, 1, 0],

  [3, 2, 1, 0, 4]

];


test.forEach(arr => console.log(reversal(arr)));


// 反转

function reversal(arr) {

  let len = arr.length;

  // get max

  let max = arr[0];

  let index = 0;

  arr.forEach((v, i) => {

    if (v <= max) return;

    max = v;

    index = i;

  });


  // strat re

  let tmp = arr.reverse().concat(arr, arr);

  let newIndex = len - 1 - index + len;


  return tmp.slice(newIndex - index, newIndex + len - index);

}


查看完整回答
反对 回复 2018-10-28
  • 1 回答
  • 0 关注
  • 537 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号