Rav*_*ale 0 java arrays sorting
arr是一个只有 5 个元素的 int 数组。我们只需要从这 5 个元素中计算 4 个最小最小数的总和和 4 个最大最大数的总和。
例子: int[] arr= {5,2,3,4,1}
在这个数组中,4 个最小的最小数是:1,2,3,4所以 totalMin = 1 + 2 + 3 + 4 = 10
最大的 4 个最大数字是:5,4,3,2 所以totalMax = 14
所以输出将是:10, 14。
我下面的代码在40% 的情况下正常工作,但在60% 的情况下不起作用。
我首先对 Array 进行排序 .. 所以总是最小的数字将是: arr[0], arr[1], arr[2], arr[3]并且MAX将是arr[4], arr[3], arr[2], arr[1]
HackerRank 显示我的这个答案在某些情况下是错误的,但那些已被锁定。我不知道那些案例……我也想知道那些案例会是什么?
有人可以解释我吗?我在这里做错了什么?
您可以在此处查看问题的更多详细信息:https : //www.hackerrank.com/challenges/mini-max-sum/problem
static void miniMaxSum(int[] arr)
{
Arrays.sort(arr);
Integer min=arr[0]+arr[1]+arr[2]+arr[3];
Integer Max=arr[4]+arr[3]+arr[2]+arr[1];
System.out.println(min+" "+Max);
}
Run Code Online (Sandbox Code Playgroud)
在给定的约束下,您可以产生的最大总和是 4 * 10 9,这会溢出一个整数。但是,它非常适合 a long,因此将值汇总为longs 应该可以解决问题:
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];
Run Code Online (Sandbox Code Playgroud)
但是请注意,由于排序,该解决方案仍然具有 O(nlog(n)) 时间复杂度。
这可以改进为 O(n) - 在数组的单次传递中,您可以获得它的总和、最小值和最大值,然后从总和中减去最大值以得到“最小值”值和总和中的最小值得到“最大值”。
使用 anIntStream将为您完成大部分繁重的工作:
IntSummaryStatistics stat = Arrays.stream(arr).summaryStatistics();
long min = stat.getSum() - stat.getMax();
long max = stat.getSum() - stat.getMin();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |