最小起始值

从给定的整数数组和任意初始值开始
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++;
            }
        }
    }

09-06 12:42