【问题标题】:Return the array which has the largest sum. In event of a tie, return a返回总和最大的数组。如果出现平局,则返回
【发布时间】:2020-06-24 09:21:15
【问题描述】:

在编写蝙蝠编码时练习 Java 问题时,我遇到了这个问题。虽然我已经解决了这个问题,但我想知道是否可以使用更少的 if-else 语句获得解决方案。你能帮我解决这个问题吗?

问题:

从两个 int 数组开始,a 和 b,每个长度为 2。考虑每个数组中值的总和。返回总和最大的数组。如果出现平局,则返回 a。

例子:-

biggerTwo([1, 2], [3, 4]) → [3, 4]
biggerTwo([3, 4], [1, 2]) → [3, 4]
biggerTwo([1, 1], [1, 2]) → [1, 2]

我的解决方案:-

public int[] biggerTwo(int[] a, int[] b) {
   if(a[0]+a[1]==b[0]+b[1]){
    return a;
  }
  else if(a[0]+a[1]>b[0]+b[1]){
    return a;
  }else{
    
  return b;
  }
}

【问题讨论】:

    标签: java arrays if-statement


    【解决方案1】:

    您可以使用三元运算符来做到这一点。

    return a[0] + a[1] >= b[0] + b[1] ? a : b;
    

    注意>=。因此,如果出现平局,将返回a

    【讨论】:

      【解决方案2】:

      对于任意长度的数组,使用>= 操作符和Streams:

      public int[] maxSum(int[] a, int[] b) {
          return IntStream.of(a).sum() >= IntStream.of(b).sum() ? a : b;
      }
      

      【讨论】:

        【解决方案3】:

        当比较多个不定长度的数组时就是这种情况。

        public int[] biggest(int[]... arrays) {
            return Stream.of(arrays)
                .min(Comparator.comparing(array -> IntStream.of(array).sum()))
                .orElse(null);
        }
        

        如果参数中没有指定数组,则返回null。

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 2021-06-18
          • 2021-03-15
          • 2018-01-04
          • 1970-01-01
          • 2023-02-26
          • 1970-01-01
          • 1970-01-01
          • 2013-12-25
          相关资源
          最近更新 更多