不使用if语句时,如何处理Kadane算法的两类异常返回条件?
问题描述
现有基于Kadane算法的Java代码,需满足两类异常返回条件:
- 输入数组为空时返回0;
- 数组所有元素均为负数时返回0。
要求不使用额外if语句处理这些异常情况,请问代码中第一个if()的条件应如何编写?
待修改的Java代码
package src; import java.util.Arrays; import java.util.ArrayList; import java.util.List; public class Sum { public static int maxSubsequence(int[] arr) { int s; if(){ for(int i =0;i<arr.length;i++){ if((arr[i]<0)||(arr.length==0)){ s=0; } } } else { int max_sum = Integer.MIN_VALUE; int end_sum = 0; for(int k : arr){ end_sum = Math.max(end_sum+k, k); max_sum = Math.max(end_sum,max_sum); } s = max_sum; } return s; } }
解决方案
第一个if()的条件可以编写为:
arr.length == 0 || Arrays.stream(arr).max().getAsInt() < 0
逻辑说明
arr.length == 0直接判断数组为空的场景;Arrays.stream(arr).max().getAsInt() < 0通过获取数组最大值,若最大值小于0,则证明数组所有元素都是负数;- 用
||连接两个条件,只要满足其中一个就进入if分支给s赋值0,否则执行Kadane算法核心逻辑,完全符合要求且无需额外if语句处理异常。
内容的提问来源于stack exchange,提问作者powpow1145
相关产品推荐
相关产品推荐

