【发布时间】:2019-05-26 04:04:05
【问题描述】:
我刚刚开始在 HackerRank 上练习以提高我的编码技能。我主要使用 Java 作为我的首选语言。我有这个问题,我已经尽力提供解决方案,但没有清除所有测试用例。 我已经清除了 15 个测试用例中的 5 个,但仍有 10 个用例需要完成。那些在hackerrank上的人可以通过以下链接查看问题:Min-Max Sum
无论如何,我还是给出了问题的简要描述:
问题说明
给定五个正整数,找出可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为一行,由两个空格分隔的长整数组成。
例如,arr=[1,3,5,7,9]。我们的最低金额是1+3+5+7=16,我们的最高金额是3+5+7+9=24。我们会打印16 24
输出格式
打印两个以空格分隔的长整数,分别表示可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。 (输出可以大于 32 位整数。)
示例输入 1 2 3 4 5
样本输出 10 14
说明
我们的初始号码是1, 2, 3, 4, and 5。我们可以使用五个整数中的四个来计算以下总和:
If we sum everything except 1, our sum is 2+3+4+5=14.
If we sum everything except 2, our sum is 1+3+4+5=13.
If we sum everything except 3, our sum is 1+2+4+5=12.
If we sum everything except 4, our sum is 1+2+3+5=11.
If we sum everything except 5, our sum is 1+2+3+4=10.
我的算法
for(i=0; i<arr.length; i++){
totSum += arr[i];
}
sumOne = totSum - arr[0];
sumTwo = totSum - arr[1];
sumThree = totSum - arr[2];
sumFour = totSum - arr[3];
sumFive = totSum - arr[4];
int[] num = {sumOne, sumTwo, sumThree, sumFour, sumFive};
int temp = 0;
for(i=0;i<num.length;i++){
for(int j=1;j<(num.length-i);j++){
if(num[j-1] > num[j]){
//swap elements
temp = num[j-1];
num[j-1] = num[j];
num[j] = temp;
}
}
}
System.out.print(num[0] + " " + num[4]);
我们也可以通过遍历num array 并找到最大值和最小值来做到这一点。
但不知何故,毕竟这样做了,我不清除这个模块。
请注意: arr 中的元素数量是固定的,只有 5 个。
我必须知道,在 10 个失败中,我知道了一个测试用例,它是这样的:
输入(标准输入)
256741038 623958417 467905213 714532089 938071625
预期输出
2063136757 2744467344
【问题讨论】:
-
您究竟需要什么帮助?
-
我试图弄清楚为什么我的代码在其余 10 个案例中都失败了@MaruthiAdithya。但是,由于您知道我们无法看到所有测试用例结果,因此我添加了一个引发查询的输入,但我的代码失败了。见最后一行。
-
@Alok 将
int更改为long int甚至尝试long long int -
但是你不认为排序也会给出我的答案,因为在打印中我将第一个元素作为最小值,最后一个元素是最大值。没有任何区别@NomanKhan