You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在求取数组最值时忽略作为哨兵值的0?

问题原因

原代码未对作为哨兵值的0做过滤,遍历到0元素时会正常参与最小/最大值的比较,因此0会被识别为最小值。

解决方案

在遍历数组时新增判断,遇到值为0的元素直接跳过比较逻辑即可,同时建议调整min和max的初始值避免边界问题,修改后完整逻辑如下:

// 初始化最小值为整数最大值,最大值为整数最小值,避免初始值干扰比较
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int lengthOfArray = arr.length;

for (int c = 0; c < lengthOfArray; c++) {
    // 跳过哨兵值0,不参与大小比较
    if (arr[c] == 0) {
        continue;
    }
    if(arr[c] < min)
        min = arr[c];             
             
    if (arr[c] > max)
       max = arr[c];      
}

// 可选:增加边界判断,避免数组全为0时输出异常值
if (min == Integer.MAX_VALUE) {
    System.out.println("数组中无有效非0元素");
} else {
    System.out.println("Smallest:");
    System.out.println(min);
    System.out.println("Largest:");
    System.out.println(max);
}

用你给出的输入1 5 3 0测试以上代码,即可得到你期望的输出结果。如果后续哨兵值需要调整,只需要修改if (arr[c] == 0)的判断条件即可。

内容的提问来源于stack exchange,提问作者Evan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:18:03