给定一个整数数组,找到起始的最小数字 X,使得数组元素与 X 相加,总和始终大于或等于 1如果给定数组是 {-2, 3, 1, -5} 例如,在上面的数组中,X 应该是 4解释:如果我们从 4 开始,然后添加第一个数字 -2,数组总和变为 4 + (-2) = 2 (>0) 现在将下一个元素 3 添加到当前总和 2,2+ 3 = 5 (>0)将下一个元素 1 添加到新的和 5 中得到 5 + 1 = 6 (>0)将最后一个元素 -5 添加到新的和 6 中得到 6 + (-5) = 1,这又更大比零。到目前为止,这是我的代码,但它不起作用:function minX(arr) { var sum = 0 var runningSum= 0 for (var i=0; i < arr.length; i++){ if ((arr[i] + sum) <= 1){ var diff = arr[i] + sum var someNumber = 1 - diff sum = someNumber + sum } runningSum += arr[i] } return sum}
3 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
首先迭代数组,同时跟踪迄今为止找到的最低总和。最后,结果是一个数字,将其与找到的最小总和相加得到 1:
const minX = (arr) => {
let recordMin = 0;
let sum = 0;
for (const elm of arr) {
sum += elm;
recordMin = Math.min(recordMin, sum);
}
return -recordMin + 1;
};
console.log(minX([-2, 3, 1, -5]));
console.log(minX([-2, 3, 1, -5, 999]));
HUH函数
TA贡献1836条经验 获得超4个赞
获取数组元素的总和,例如,使用Array.prototype.reduce
:
arr.reduce((a, b) => a + b, 0);
然后,对其取负并加 1。所以,总而言之:
function minX(arr) { return -arr.reduce((a, b) => a + b, 0) + 1; }
或者,简化一下:
function minX(arr) { return arr.reduce((a, b) => a - b, 1); }
SMILET
TA贡献1796条经验 获得超4个赞
您可以获取想要的结果并减去数组的所有值。
function minX(array) {
return array.reduce((s, v) => s - v, 1);
}
console.log(minX([-2, 3, 1, -5])); // 4
添加回答
举报
0/150
提交
取消