如何在求取数组最值时忽略作为哨兵值的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
相关产品推荐
相关产品推荐

