我最近开始在 HackerRank 上练习,以提高我的编码技能,主要使用 Java 作为我的首选语言。我有一个问题,我已经尽力给出了解决方案,但没有通过所有的测试用例。我只通过了 15 个测试用例中的 5 个,还剩下 10 个测试用例未完成。在 HackerRank 上的用户可以通过此链接查看问题: Min-Max Sum
问题简述如下:
例如,
打印两个用空格分隔的长整型数,表示可以通过将恰好四个整数相加计算出的分别最小和最大的值。(输出可以大于32位整数。) 示例输入
我们也可以通过迭代`num array`,找到最大值和最小值来实现这一点。
但是不知道为什么,我还是没能通过这个模块。
请注意:arr中的元素数量是固定的,只有5个。
我已经了解到,在这10个失败的测试用例中,其中一个测试用例如下:
输入(stdin) 256741038 623958417 467905213 714532089 938071625
期望输出 2063136757 2744467344
问题陈述:
给定五个正整数,找到仅对其中四个整数进行求和所能得到的最小值和最大值。然后将分别计算出的最小值和最大值作为两个长整型数并在单行中输出,两个数之间用一个空格隔开。例如,
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 和 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个失败的测试用例中,其中一个测试用例如下:
输入(stdin) 256741038 623958417 467905213 714532089 938071625
期望输出 2063136757 2744467344
int
改为long int
或尝试long long int
。 - Phenomenal One