Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组中最大数之和_Java_Arrays_Sorting - Fatal编程技术网

Java 数组中最大数之和

Java 数组中最大数之和,java,arrays,sorting,Java,Arrays,Sorting,arr是一个仅包含5个元素的整数数组。 我们只需要计算这5个元素中4个最小数和4个最大数的和 示例:int[]arr={5,2,3,4,1} 在这个数组中, 4最小值为:1,2,3,4sototalMin=1+2+3+4=10 最大的4个最大数字是:5,4,3,2sototalMax=14 因此,输出将是:10、14 我下面的代码适用于40%案例,但不适用于60%案例 我先对数组排序。。因此,始终最小的数字将是:arr[0]、arr[1]、arr[2]、arr[3]和MAX将是arr[4]、ar

arr
是一个仅包含5个元素的整数数组。 我们只需要计算这5个元素中4个最小数和4个最大数的和

示例:
int[]arr={5,2,3,4,1}

在这个数组中, 4最小值为:
1,2,3,4
so
totalMin=1+2+3+4=10

最大的4个最大数字是:
5,4,3,2
so
totalMax=14

因此,输出将是:
10、14

我下面的代码适用于40%案例,但不适用于60%案例

我先对数组排序。。因此,始终最小的数字将是:
arr[0]、arr[1]、arr[2]、arr[3]
MAX将是
arr[4]、arr[3]、arr[2]、arr[1]

HackerRank显示我的回答在某些情况下是错误的,但这些都是锁定的。我不知道那些案子。。。我还想知道这些案例会是什么

谁能给我解释一下吗?我在这里做错了什么

您可以在此处查看问题的更多详细信息:


在给定的约束条件下,可以生成的最大和是4*109,它溢出了一个整数。但是,它非常适合于
long
,因此将值求和为
long
s应该可以:

long min = (long)arr[0] + (long)arr[1] + (long)arr[2] + (long)arr[3];
long max = (long)arr[4] + (long)arr[3] + (long)arr[2] + (long)arr[1];
但是,请注意,由于排序的原因,此解决方案仍然具有O(nlog(n))时间复杂度。
这可以改进为O(n)-在数组的一次遍历中,可以得到它的和,最小值和最大值,然后从和中减去最大值,得到“最小”值,从和中减去最小值,得到“最大”值

使用
IntStream
将为您完成大部分繁重的工作:

IntSummaryStatistics stat =  Arrays.stream(arr).summaryStatistics();
long min = stat.getSum() - stat.getMax();
long max = stat.getSum() - stat.getMin();

上面的操作将起作用,原因是输入,结果可能超过32位,因此我们必须使用long,并且在执行求和操作之前,我们已对long的每个值进行了强制转换,因为它也可能超过32位。我的错误是没有将int转换为long(64位整数)。错误是因为整数溢出

    static void miniMaxSum(int[] arr) 
     {
        Arrays.sort(arr);
        long min= (long)arr[0]+(long)arr[1]+(long)arr[2]+(long)arr[3];
        long max= (long)arr[4]+(long)arr[3]+(long)arr[2]+(long)arr[1];
        System.out .println(min+" "+max);
     }

如果你能提供一个你的程序无法运行的“60%”案例,那将是非常有帮助的。hackerRank显示那些案例被锁定..我也不知道那些案例,这就是为什么我在这里询问。。。其他情况可能是什么?可能您没有听到提示:“小心整数溢出!使用64位整数。”此外,尽管与您的问题无关,但也不要给变量命名以大写字母开头(
Max
-使用
Max
)。另外,如果可以使用
int
(或者可以使用
Long
Long
),则不要使用
Integer
。创建对象是没有意义的,不过对于这样一个小程序来说,这并不重要。除了Eran报告的问题之外,可能会导致您决定对数组进行排序,您超出了问题的超时限制。您不需要使用
Long
。最好使用
long
,而且可读性更好
long min=(long)arr[0]+arr[1]+arr[2]+arr[3]
-更短,更容易理解。
IntStream
类似乎非常适合这类问题。谢谢
long first =  arr[0];

long second =  arr[1];

long third =  arr[2];

long fourth =  arr[3];

long fifth =  arr[4];

long min = first + second + third + fourth;

long Max  = second + third + fourth + fifth;
    static void miniMaxSum(int[] arr) 
     {
        Arrays.sort(arr);
        long min= (long)arr[0]+(long)arr[1]+(long)arr[2]+(long)arr[3];
        long max= (long)arr[4]+(long)arr[3]+(long)arr[2]+(long)arr[1];
        System.out .println(min+" "+max);
     }