我刚刚开始在HackerRank上练习,以提高我的编码技巧。我主要使用Java作为我的首选语言。我已经得到了这个问题,我已经尽力给出了解决方案,但没有清除所有的测试用例。我已经清除了15个测试用例中的5个,但仍有10个需要完成。那些在hackerrank上的人可以通过以下链接看到这个问题:最小-最大和
无论如何,我给出了这个问题的简要描述:
问题陈述
给定五个正整数,通过将五个整数中的恰好四个求和,找到可以计算出的最小值和最大值。然后将各自的最小值和最大值打印为两个空格分隔的长整数的单行。
解释
我们的初始数字是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]);
预期输出2063136757 2744467344
您的想法是正确的(尽管对数组进行排序有点矫枉过正,因为您只需要它的最大值和最小值),但是当您对这些大整数求和时,您会溢出sumtot
变量并得到错误的答案。使用long
s可以解决此问题:
long totSum = 0;
for(int i=0; i<arr.length; i++){
totSum += arr[i];
}
long sumOne = totSum - arr[0];
long sumTwo = totSum - arr[1];
long sumThree = totSum - arr[2];
long sumFour = totSum - arr[3];
long sumFive = totSum - arr[4];
long[] num = {sumOne, sumTwo, sumThree, sumFour, sumFive};
long temp = 0;
for(int 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]);
注意,顺便说一句,使用Java8的流,您可以实现相同的逻辑,并节省大量样板代码以及O(nlog(n))排序:
IntSummaryStatistics stats = Arrays.stream(arr).summaryStatistics();
System.out.println
((stats.getSum() - stats.getMax()) + " " + (stats.getSum() - stats.getMin()));
问题内容: 我的代码没有给出错误,但是没有显示最小值和最大值。代码是: 我是否需要system.out.println()来显示它,否则返回应该起作用吗? 问题答案: 您正在调用方法,但不使用返回的值。
问题内容: 我想输出二维数组的最大值和最小值。Max可以很好地工作,但是即使在数组中没有零的情况下min也总是输出零。在本例中,我设置为99以防止较小的机会在数组中获得零。继承人完整代码: 问题答案: 由于您在中选择随机值的方式,不会存在小于零的值- 但也无法保证任何值都将恰好为零。但是,您将初始化为零,因为这是数组元素的默认值;没有什么比这更小了,所以答案总是零。 您应该在标记为“查找最小值”的
我有以下BST供参考。英国夏令时 假设最小值:9 和最大值:20 它满足所有条件,对于每个节点 (X),左侧子树中的所有节点都小于,并且右侧子树中的所有节点都大于 X 的值。 我在创建打印所有值的函数(成员函数,因此它可以访问根节点)时遇到了问题。具体来说,假设我的当前节点是10,但是我仍然需要检查左右两边的子树。我不能在参数中传递节点(否则我会这样做?),所以我要实现这个功能 此外,函数应该只访
那么我如何使用这个pair类和我的方法来找到最小值和最大值。
问题内容: 我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有和。python中是否有类似的东西? 问题答案: Python 3 在Python 3中,此问题不适用。普通int类型是无界的。 但是,你实际上可能正在寻找有关当前解释器的字长的信息,在大多数情况下,该信息将与机器的字长相同。该信息在Python 3中仍以形式提供,这是一个有符号的单词可以表示的最大值。等效地,它是
问题内容: 我想在逻辑范围内生成一个随机整数。因此,举例来说,我正在编写一个程序来“掷掷”具有指定边数的骰子。 现在的问题是,它将返回边与零之间的值, 包括 0和0,这是没有意义的,因为大多数骰子从1到6、9等。因此,我如何指定nextInt应该在1和边数之间起作用? 问题答案: 要在 from 和 to (包括)之间生成一个随机的int值(均匀分布),请使用: 以您的情况(1 ..面):