为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 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]));


查看完整回答
反对 回复 2023-09-28
?
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);
}


查看完整回答
反对 回复 2023-09-28
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以获取想要的结果并减去数组的所有值。


function minX(array) {

    return array.reduce((s, v) => s - v, 1);

}


console.log(minX([-2, 3, 1, -5])); // 4


查看完整回答
反对 回复 2023-09-28
  • 3 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信