如果数组中没有奇数则返回 0

'此方法的目标是返回数组中最大的奇数值。当数组中没有奇数值时就会出现问题。当没有奇数值时,我需要返回 0,但我的代码对于所有测试都返回 0。


static int maxOdd(int[] nums) {

    int max = Integer.MIN_VALUE;

    int sum = 0;

    for(int i = 0; i < nums.length; i++){

        sum += nums[i];

        if(nums[i] % 2 == 1 && nums[i] > max){

            max = nums[i];

    }

        else if(sum % 2 == 0){

            max = 0;

        }

    }

    return max;

}


湖上湖
浏览 106回答 2
2回答

慕尼黑8549860

我看到很多代码本来应该是一个相当简单的算法;我建议您默认max而0不是Integer.MIN_VALUE使用for-each循环。比如,for-each价值v在nums; iff该值是奇数,设置为和max的当前值中的最大值。比较所有值后返回。喜欢,maxvmaxstatic int maxOdd(int[] nums) {    int max = 0;    for (int v : nums) {        if (v % 2 == 1) {            max = Integer.max(max, v);        }    }    return max;}或者,如果使用 Java 8+,您可以使用 获得相同的结果IntStream,使用filtering lambda 来获取奇数值,并使用OptionalInt.orElse(int)来设置默认值。喜欢,static int maxOdd(int[] nums) {    return IntStream.of(nums).filter(i -> i % 2 == 1).max().orElse(0);}

森栏

您可以将 max 的初始值设置为零并删除 else if 语句static int maxOdd(int[] nums) {&nbsp; &nbsp; int max = 0;&nbsp; &nbsp; int sum = 0;&nbsp; &nbsp; for(int i = 0; i < nums.length; i++){&nbsp; &nbsp; &nbsp; &nbsp; sum += nums[i];&nbsp; &nbsp; &nbsp; &nbsp; if(nums[i] % 2 == 1 && nums[i] > max){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max = nums[i];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return max;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java