找到最小初始值,使得总和始终为 1 或更大

给定一个整数数组,找到起始的最小数字 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

}


狐的传说
浏览 108回答 3
3回答

尚方宝剑之说

首先迭代数组,同时跟踪迄今为止找到的最低总和。最后,结果是一个数字,将其与找到的最小总和相加得到 1:const minX = (arr) => {&nbsp; let recordMin = 0;&nbsp; let sum = 0;&nbsp; for (const elm of arr) {&nbsp; &nbsp; sum += elm;&nbsp; &nbsp; recordMin = Math.min(recordMin, sum);&nbsp; }&nbsp; return -recordMin + 1;};console.log(minX([-2, 3, 1, -5]));console.log(minX([-2, 3, 1, -5, 999]));

HUH函数

获取数组元素的总和,例如,使用Array.prototype.reduce:arr.reduce((a,&nbsp;b)&nbsp;=>&nbsp;a&nbsp;+&nbsp;b,&nbsp;0);然后,对其取负并加 1。所以,总而言之:function&nbsp;minX(arr)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-arr.reduce((a,&nbsp;b)&nbsp;=>&nbsp;a&nbsp;+&nbsp;b,&nbsp;0)&nbsp;+&nbsp;1; }或者,简化一下:function&nbsp;minX(arr)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;return&nbsp;arr.reduce((a,&nbsp;b)&nbsp;=>&nbsp;a&nbsp;-&nbsp;b,&nbsp;1); }

SMILET

您可以获取想要的结果并减去数组的所有值。function minX(array) {&nbsp; &nbsp; return array.reduce((s, v) => s - v, 1);}console.log(minX([-2, 3, 1, -5])); // 4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript