javascript - 我怎样才能让我的循环更快它花费的时间太长
问题描述
我试图在左旋转后获取最大元素的索引。想法是基于旋转数组旋转数组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;
}
解决方案
我怎样才能让我的循环更快它花费的时间太长
TL;DR 通过删除rotateArray()
功能
更长的解释:
我建议把它分成更小的部分。首先,我会编写一个函数来获取输入数组中最大项的索引。您可以使用单个 for 循环轻松完成此操作。
现在,一旦您知道最大项目的起始索引。考虑一下如何在n
位置轮换后快速计算该项目的索引。rotate
对数组中的每个数字重复此操作。
推荐阅读
- javascript - 如何在 jQuery 中对每个元素使用 find
- odoo-10 - 可用性状态不准确(由于 Feed 和着陆页之间的可用性状态不一致)
- ios - 让用户能够在临时 UIView 上向下滑动
- javascript - 我无法在 ReactJS 中将值从子组件传递给父组件(功能组件)
- flutter - 在 DropDown 小部件中添加带有 API 货币文本的图像
- list - 颤振发送列表到另一个类
- javascript - Javascript 中的 OnClIck 不适用于图像
- github - 如何在 Github 上请求重新授权 OAuth 应用程序?
- json - 错误:需要一个“Item”类型的值,但得到一个“_JsonMap”类型的值
- php - 从字符串生成 6 位数字(用于电子邮件验证)