首页 > 解决方案 > 我怎样才能让我的循环更快它花费的时间太长

问题描述

我试图在左旋转后获取最大元素的索引。想法是基于旋转数组旋转数组a。所以旋转数组是循环的,每个迭代数组 a 都旋转了很多次作为元素旋转的值。假设它的 2 则旋转数组 'a' 2 次。同时找到旋转数组的最大元素的索引并保持存储。但是代码执行时间太长,一段时间后测试超时让我们说这是我的数组

const a = [ 1, 2, 4, 3 ]; 
const rotate = [ 2, 1 ];

的预期输出getLargestItemIndices将是这样的数组

[ 0, 1 ]

至于第一次迭代(2 次旋转)最大值(4)在索引 0 处,第二次迭代最大值在 1

let indices =[];
const getMaxValueIndex = (arr)=>{
    const maxValue = Math.max.apply(Math, arr);
    return arr.indexOf(maxValue);
}

const rotateArray = (a,d)=>{
    while (d) {
      a.push(a.shift());
      d--;
   }
   indices.push(getMaxValueIndex(a));
}

function getLargestItemIndices(a, rotate) {

    for (var index = 0; index < rotate.length; index++) {
        rotateArray(a.slice(), rotate[index]);
    }  
    return indices;
}

标签: javascriptarrays

解决方案


我怎样才能让我的循环更快它花费的时间太长

TL;DR 通过删除rotateArray()功能

更长的解释:

我建议把它分成更小的部分。首先,我会编写一个函数来获取输入数组中最大项的索引。您可以使用单个 for 循环轻松完成此操作。

现在,一旦您知道最大项目的起始索引。考虑一下如何在n位置轮换后快速计算该项目的索引。rotate对数组中的每个数字重复此操作。


推荐阅读