Java嵌套循环实现数组唯一单次出现元素查找的逻辑错误排查求助
问题排查与修正方案
嘿,我一眼就瞅出你代码里的问题啦!核心问题出在**count变量没有在外层循环的每次迭代中重置为0**,导致它会累加之前循环的计数结果,最终干扰了判断逻辑。
错误原因详细分析
咱们拿你测试的数组{1,0,1}来一步步走一遍:
- 第一次外层循环(
j=0):tmp被赋值为1,内层循环遍历数组后,count变成2(因为1出现了两次),这时候count !=1,循环继续。 - 第二次外层循环(
j=1):tmp被赋值为0,但count还是保留着上一次的2!内层循环遍历数组,0只出现一次,所以count变成2+1=3,依然不等于1,循环继续。 - 第三次外层循环(
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
相关产品推荐
相关产品推荐

