首页 > 解决方案 > 如果其中没有奇数值,则返回 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;
}

标签: javaarrays

解决方案


我看到很多代码应该是一个相当简单的算法;我建议你默认max使用0而不是Integer.MIN_VALUE使用for-each循环。类似的东西,for-each价值v; 如果该值是奇数,则设置为 和 的当前值中的最大值。比较所有值后返回。喜欢,numsmaxmaxvmax

static int maxOdd(int[] nums) {
    int max = 0;
    for (int v : nums) {
        if (v % 2 == 1) {
            max = Integer.max(max, v);
        }
    }
    return max;
}

或者,如果使用 Java 8+,您可以使用 an IntStream, a filtering lambda 来获取奇数值,并使用 anOptionalInt.orElse(int)来设置默认值来获得相同的结果。喜欢,

static int maxOdd(int[] nums) {
    return IntStream.of(nums).filter(i -> i % 2 == 1).max().orElse(0);
}

推荐阅读