最近在一次采访中遇到了这个问题。给定一个整数数组,找到可以用作起点的最小整数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;
}
答案 0 :(得分:1)
这里的问题是,在您的for循环中,您使用i = 0;
进行重置,但是在下一个迭代中,for循环将i
递增为1,这意味着您跳过列表中的第一个数字。我只是尝试简单地将该行更改为i = -1;
。
答案 1 :(得分:0)
您的问题是if
块-您不应有一个。
我还怀疑您误解了这个问题,我将其理解为 return 1-最低总运行次数。
类似这样的东西:
public static long minStart(List<Integer> arr) {
long total = 0; // long to avoid integer overflow
long min = Long.MAX_VALUE;
for (int n : arr) {
total += n;
min = Math.min(min, total);
}
return 1 - min;
}
要进一步减少代码量,可以将循环替换为:
for (int n : arr)
min = Math.min(min, total += n);
这可能会或可能不会给人留下深刻印象,具体取决于您的受众。