求解Find Closest Number to Zero问题:代码在[1,1,-1]输入下出错
问题分析与代码修正
问题根源
你的代码错误在于,当遇到绝对值相等的元素时,你选择了索引更大的元素,但题目要求的是返回值更大的元素。比如输入[1,1,-1],最后一个元素-1的索引最大,但它的值比前面的1小,这就导致返回错误结果。
修正方案
我们需要直接比较元素的值,而不是索引。调整逻辑如下:
- 初始化
ans为数组第一个元素,minDiff为该元素的绝对值 - 遍历数组中的每个元素:
- 计算当前元素的绝对值
currentDiff - 若
currentDiff小于minDiff:更新minDiff,并将ans设为当前元素 - 若
currentDiff等于minDiff:将ans更新为当前元素和ans中的较大值
- 计算当前元素的绝对值
修正后的代码
class Solution { public int findClosestNumber(int[] nums) { int minDiff = Math.abs(nums[0]); int ans = nums[0]; for (int num : nums) { int currentDiff = Math.abs(num); if (currentDiff < minDiff) { minDiff = currentDiff; ans = num; } else if (currentDiff == minDiff) { ans = Math.max(ans, num); } } return ans; } }
测试验证
对于输入[1,1,-1]:
- 初始
ans=1,minDiff=1 - 遍历到第二个
1时,currentDiff=1等于minDiff,Math.max(1,1)仍为1,ans不变 - 遍历到
-1时,currentDiff=1等于minDiff,Math.max(1,-1)还是1,最终返回1,符合题目要求
内容的提问来源于stack exchange,提问作者Pushpendra Singh
相关产品推荐
相关产品推荐

