当前位置: 首页 > 知识库问答 >
问题:

用Java打印最大值和最小值

梁丘翔
2023-03-14

我刚刚开始在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

共有1个答案

金烨华
2023-03-14

您的想法是正确的(尽管对数组进行排序有点矫枉过正,因为您只需要它的最大值和最小值),但是当您对这些大整数求和时,您会溢出sumtot变量并得到错误的答案。使用longs可以解决此问题:

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 ..面):