我有一个数组需要将其反转,下面是列子,需要注意的最大值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);
}
添加回答
举报
0/150
提交
取消