返回总和最大的数组.如果出现平局,则返回 a



在编码蝙蝠上练习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;
}
}

您可以使用三元运算符来执行此操作。

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

注意>=.因此,它是平局的事件,a将被返回。

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

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

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

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

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

最新更新