首页 > 解决方案 > Mini-Max Sum HACKERHANK JS,为什么不工作?

问题描述

我不知道怎么了,我的函数 miniMaxSum 不是求和 1+3+4+5。最后,结果数组变成了这个 [ 14, 12, 11, 10 ],它应该看起来像这样 [ 14, 13 , 12, 11, 10 ]

function miniMaxSum(arr) {
  let results = [];
  let actualValue = 0;
  let skipIndex = 0;

  for (let i = 0; i < arr.length; i++) {
    //skip actual index
    if (i == skipIndex) continue;
    actualValue += arr[i];

    //restart the loop
    if (i == arr.length - 1) {
      skipIndex++;
      results.push(actualValue);
      actualValue = 0;
      i = 0;
    }
  }
  console.log(results);
  console.log(Math.min(...results), Math.max(...results));
}

console.log(miniMaxSum([1, 2, 3, 4, 5]));

标签: javascriptarraysloopsfor-loop

解决方案


假设你在谈论这个问题。

每当您想重新启动循环时,您都在设置i=0但观察到循环中也有增量语句i++for因此有效地i从 开始1,而不是0。您需要在后续迭代中i=-1进行设置。i=-1+1 = 0完成此操作后,您需要处理一个角落案例。何时skipIndex==arr.length-1,检查是否i == arr.length-1。如果是,则执行results.push(actualValue);最后一个值,然后for循环终止,因为i < arr.lengthfalse在下一次迭代中。


代码:

function miniMaxSum(arr) {
let results = [];
let actualValue = 0;
let skipIndex = 0;
  
for (let i = 0; i < arr.length; i++) {
    //skip actual index
    if (i == skipIndex){
        if(i == arr.length - 1)
            results.push(actualValue);
        continue;
    }
    actualValue += arr[i];

    //restart the loop
    if (i == arr.length - 1) {
        skipIndex++;
        results.push(actualValue);
        actualValue = 0;
        i = -1;
    }
}
console.log(results);
console.log(Math.min(...results), Math.max(...results));
}

miniMaxSum([1, 2, 3, 4, 5]);


输出

[ 14, 13, 12, 11, 10 ]
10 14

推荐阅读