求助一个数组操作问题

我有一个数组需要将其反转,下面是列子,需要注意的最大值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];


摇曳的蔷薇
浏览 567回答 1
1回答

料青山看我应如是

这个其实很简单的,以空间换时间,先翻转,然后连拼3个,再计算之前的最大值所在的位置,进行新数组的切割。最大的性能消耗在getmax上。var test = [&nbsp; [1, 0, 4, 3, 2],&nbsp; [0, 4, 3, 2, 1],&nbsp; [4, 3, 2, 1, 0],&nbsp; [3, 2, 1, 0, 4]];test.forEach(arr => console.log(reversal(arr)));// 反转function reversal(arr) {&nbsp; let len = arr.length;&nbsp; // get max&nbsp; let max = arr[0];&nbsp; let index = 0;&nbsp; arr.forEach((v, i) => {&nbsp; &nbsp; if (v <= max) return;&nbsp; &nbsp; max = v;&nbsp; &nbsp; index = i;&nbsp; });&nbsp; // strat re&nbsp; let tmp = arr.reverse().concat(arr, arr);&nbsp; let newIndex = len - 1 - index + len;&nbsp; return tmp.slice(newIndex - index, newIndex + len - index);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript