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

求解Find Closest Number to Zero问题:代码在[1,1,-1]输入下出错

问题分析与代码修正

问题根源

你的代码错误在于,当遇到绝对值相等的元素时,你选择了索引更大的元素,但题目要求的是返回值更大的元素。比如输入[1,1,-1],最后一个元素-1的索引最大,但它的值比前面的1小,这就导致返回错误结果。

修正方案

我们需要直接比较元素的值,而不是索引。调整逻辑如下:

  1. 初始化ans为数组第一个元素,minDiff为该元素的绝对值
  2. 遍历数组中的每个元素:
    • 计算当前元素的绝对值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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:06:27