狐的傳說
2023-09-28 09:49:46
給定一個整數數組,找到起始的最小數字 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
提交
取消