javascript - 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]));
解决方案
假设你在谈论这个问题。
每当您想重新启动循环时,您都在设置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.length
它false
在下一次迭代中。
代码:
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
推荐阅读
- mongodb - expressjs 不允许变量保留范围,即使它们不是本地的
- hibernate - JPA/Hibernate:在不存在的序列/关系上选择 currval
- ruby-on-rails - 如何在 rails api 中使用 devise-jwt 和 devise 进行登录、注册和注销
- crystal-reports-2010 - 如何避免水晶报表中的下一个整数?
- python - 如何在 Django 项目中启动 celery worker
- java - 从另一个类调用函数?
- swift - 键盘未关闭
- r - 如何更改包装器(R)中函数的绘图参数
- java - 如果缓存为空 NPE 则进行改造
- gitlab - 如何在 Gitlab 中运行不会阻塞后续阶段的作业?