【发布时间】:2020-07-27 17:36:26
【问题描述】:
最近在一次采访中遇到了这个问题。给定一个整数数组,找到可以用作起点的最小整数 x,这样当您将数组中的每个数字添加到运行总数中时,运行总数永远不会低于 1。他们给我的函数存根,对于Java,接受了一个列表集合,我应该返回一个很长的。对我来说,这个解决方案似乎必须有效,但每个测试用例都失败了。为什么?
public static long minStart(List<Integer> arr) {
long minStart = 0;
long runningTotal = minStart;
for(int i = 0; i<arr.size(); i++){
runningTotal += arr.get(i);
if(runningTotal<1){
minStart++;
i = 0;
runningTotal = minStart;
}
}
return minStart;
}
【问题讨论】:
-
为什么要增加 minStart 变量?
-
您假设最小起始 int 至少为零。会不会是负数?
-
为什么不计算数组的总和并找出最小的总和。然后使您的起始 int 等于该最小值的负数。
-
我增加 minStart 以便找到起点。起点,或 minStart,必须是一个正整数,并且必须是最小的,以确保 runningTotal 永远不会低于 1。我的想法是从低处开始并移动到更高处,这样第一个有效的值必须是可能的最小值价值
标签: java arrays collections