最小起始值
从给定的整数数组和任意初始值开始
x。计算x加上每个数组元素的总和,向左移
对。流动总和不得低于1.确定最小值
x的值。
示例arr = [4,-2,3,1,-5]第一个元素是大小,因此您需要处理的数组将是arr = [-2,3,1,-5],大小n = 4
如果x = 4,将获得以下结果。
sum arr[i]
----- ------
4 -2
2 3
5 1
6 -5
1
因此最小值为4。
类似地,对于数组arr = [10,-5,4,-2,3,1,-1,-6,-1,0,-5],大小将为10,因此实际数组为arr = [-5、4,-2、3、1,-1,-6,-1、0,-5]。
if x=6, following result would be obtained.
sum arr[i]
----- ------
6 -5
1 4
5 -2
3 3
6 1
7 -1
0 -6
-1
0
-5
因此,在运行总和期间,我们得到的总和为0且小于1,因此x = 6不是最小值。
如果x = 11,将得到以下结果。
sum arr[i]
----- ------
11 -5
6 4
10 -2
8 3
11 1
12 -1
11 -6
5 -1
4 0
4 -5
-1
这是不正确的,我们得到的数字小于1,因此不是最小值。
如果x = 13,将得到以下结果。
sum arr[i]
----- ------
13 -5
8 4
12 -2
10 3
13 1
14 -1
13 -6
7 -1
6 0
6 -5
1
因此,最小值将为13
下面是我为上述问题编写的代码。该测试有5个测试用例,所有这些用例在我的本地IDE中都成功,但是在hackerrank IDE中都失败了。
public static int minX(List<Integer> arr) {
int x=0;
arr.remove(0);
boolean limitFound = false;
while(!limitFound){
int sum=x;
for(Integer i: arr){
sum+=i;
if(sum<1){
break;
}
}
limitFound = sum<1?false:true;
if(limitFound){
break;
}
x++;
}
return x;
}
我的解决方案真的找不到任何问题,另外,请帮助我了解为什么它在那里失败,并且当我在本地IDE中尝试同样的解决方案时,它通过了所有相同的测试场景。此外,如何改进代码也将有所帮助。
最佳答案
试过这个..它的工作(本地是)。如果您可以提供有关TC失败的TC的更多详细信息,也许您还可以尝试添加一些sysout以便更好地了解。可能您也可以发布黑客排名que链接:)
public static int minX(List<Integer> arr) {
int x = 0;
arr.remove(0);
while (true) {
int sum = x;
for (Integer i : arr) {
sum += i;
}
if (sum == 1) {
return x;
} else {
x++;
}
}
}