首页 > 解决方案 > 如何对数组进行j操作?

问题描述

j给定一个整数数组,在数组上执行操作的最有效方法j=>什么<= array.length

我尝试过这样的事情......

function performJ(arr, j) {
  arr.sort((a, b) => b - a);
  let i = 0;
  while (j !== 0) {
   if (i < arr.length) {
     arr[i] = Math.ceil(arr[i] / 2)
   } else {
     // when i reaches arr.length, reset it to continue operations j
     i = 0;
     arr[i] = Math.ceil(arr[i] / 2)
   }
   // increment i, step through arr
   ++i;
   // decrement j as we perform operations on arr
   --j;
 }
 return arr.reduce((a, b) => a + b);
}

这适用于很多情况,但由于某种原因,它似乎是大量输入,arrj导致while循环中的算术运算无法运行。

谢谢!

编辑:为清楚起见,编辑了问题。我以前有一个可行的解决方案,但花了太长时间。此解决方案的算术已关闭,但运行速度更快。

标签: javascriptarrays

解决方案


使用模迭代[i % arr.length]从 0 到的索引j

function performJ(arr, j) {
  arr.someMethod(); // ?
  for (let i = 0; i < j; i++) {
    arr[i % arr.length] = /* operation */
  }
  return arr.someMethod(); // ?
}

推荐阅读