LeetCode 3194:代码无法正确计算最小平均值,始终返回0.00问题求助
LeetCode 3194:代码无法正确计算最小平均值,始终返回0.00问题求助
嘿,我来帮你排查一下这个问题!你说代码始终返回0.00而不是正确的最小平均值,用GPT也没解决,咱们先从你的思路和代码细节入手分析。
首先,你的初始思路——排序数组后用首尾指针配对计算平均值,再找最小值——本身是没问题的,但代码里的几个细节导致了错误结果。
问题核心分析
- 未赋值的数组元素干扰结果:你初始化了一个长度和
nums一致的averages数组,但循环里只给前半部分元素赋值,剩下的元素默认是0.0。最后取整个数组的最小值时,自然会拿到这个默认的0.0,这就是最关键的问题! - 冗余的子数组操作:数组已经排序,
nums[startpos]就是当前配对的最小值,nums[endpos]就是最大值,完全没必要拷贝子数组再用stream找min和max,既浪费性能又多余。
修正后的代码
我帮你优化了代码,解决了上述问题:
import java.util.Arrays; class Solution { public double minimumAverage(int[] nums) { Arrays.sort(nums); int startpos = 0; int endpos = nums.length - 1; // 初始化为最大的double值,确保第一个平均值能覆盖它 double minAvg = Double.MAX_VALUE; // LeetCode3194的数组是偶数长度,用startpos < endpos刚好配对完所有元素 while (startpos < endpos) { // 直接利用排序后的首尾元素计算平均值 double average = (double)(nums[startpos] + nums[endpos]) / 2.0; // 实时更新最小平均值 if (average < minAvg) { minAvg = average; } startpos++; endpos--; } return minAvg; } }
关键修正点
- 去掉了
averages数组,改用单个变量minAvg实时跟踪最小平均值,彻底避免未赋值元素的干扰。 - 直接利用排序数组的特性计算平均值,省去冗余的子数组拷贝和min/max查找,提升代码效率。
- 调整循环条件,确保每一对元素都被正确处理,不会出现遗漏或重复计算。
这样修改后,代码就能正确返回预期的最小平均值了!
备注:内容来源于stack exchange,提问作者Krish Vij
相关产品推荐
相关产品推荐

