为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2023-10-19 15:02:50
'此方法的目标是返回数组中最大的奇数值。当数组中没有奇数值时就会出现问题。当没有奇数值时,我需要返回 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;}
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我看到很多代码本来应该是一个相当简单的算法;我建议您默认max0不是Integer.MIN_VALUE使用for-each循环。比如,for-each价值vnumsiff该值是奇数,设置为和max的当前值中的最大值。比较所有值后返回。喜欢,maxvmax


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+,您可以使用 获得相同的结果IntStream,使用filtering lambda 来获取奇数值,并使用OptionalInt.orElse(int)来设置默认值。喜欢,


static int maxOdd(int[] nums) {

    return IntStream.of(nums).filter(i -> i % 2 == 1).max().orElse(0);

}




查看完整回答
反对 回复 2023-10-19
?
森栏

TA贡献1810条经验 获得超5个赞

您可以将 max 的初始值设置为零并删除 else if 语句


static int maxOdd(int[] nums) {

    int max = 0;

    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];

        }

    }

    return max;

}


查看完整回答
反对 回复 2023-10-19
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信