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

Java嵌套循环实现数组唯一单次出现元素查找的逻辑错误排查求助

问题排查与修正方案

嘿,我一眼就瞅出你代码里的问题啦!核心问题出在**count变量没有在外层循环的每次迭代中重置为0**,导致它会累加之前循环的计数结果,最终干扰了判断逻辑。

错误原因详细分析

咱们拿你测试的数组{1,0,1}来一步步走一遍:

  1. 第一次外层循环(j=0):tmp被赋值为1,内层循环遍历数组后,count变成2(因为1出现了两次),这时候count !=1,循环继续。
  2. 第二次外层循环(j=1):tmp被赋值为0,但count还是保留着上一次的2!内层循环遍历数组,0只出现一次,所以count变成2+1=3,依然不等于1,循环继续。
  3. 第三次外层循环(j=2):tmp被赋值为1,count从3开始累加,遍历后变成3+2=5,还是不满足条件。循环结束后返回最后一次的tmp也就是1,这就和预期的0不符了。

修正后的代码

只需要把count的声明移到外层循环内部,或者每次外层循环开始时重置count为0就行:

/**
 * 
 * @author Ryan
 */
public class SingleNum {
    public static int singleNumber(int[] nums) {
        int tmp=0;
        for(int j = 0;j < nums.length;j++) {
            int count=0; // 把count放到外层循环内,每次迭代都重置为0
            tmp = nums[j];
            for(int i = 0;i < nums.length;i++) {
                if(tmp == nums[i]) count+=1;
            }
            if(count == 1) break;
        }
        return tmp;
    }
    
    class Solution {
    }
    
    public static void main(String[] args) {
        int array [] = {1,0,1};
        System.out.println(singleNumber(array)); // 现在会输出正确的0
    }
}

额外小建议

如果追求更高的效率,其实可以用异或运算来解决这个问题,时间复杂度是O(n),空间复杂度O(1),比嵌套循环的O(n²)效率高很多。原理是:相同数字异或结果为0,0和任何数字异或结果为该数字本身。代码示例如下:

public static int singleNumber(int[] nums) {
    int result = 0;
    for (int num : nums) {
        result ^= num;
    }
    return result;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:37:35