Минимальное начальное значение
Начните с заданного массива целых чисел и произвольного начального значения 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 тестовых случаев, все они были успешными. l в моей локальной среде IDE, но все не удалось в среде hackerrank.
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, он прошел все тот же тестовый сценарий ios. Кроме того, будет полезно, как улучшить код.