当前位置: 代码迷 >> 综合 >> LeetCode 136 SingleNumber
  详细解决方案

LeetCode 136 SingleNumber

热度:74   发布时间:2024-01-19 14:29:30.0

题目要求时间复杂度为O(n),且不分配额外空间。

利用for循环,逐一对数组元素进行异或运算。


以下是关于异或的知识点:

1. 如果a等于b 则 a^b = 0;

2  如果a不等于b 则a^b = 1


对于任意整数n,n^0 = n ,而n^n = 0

异或运算是满足交换结合律的


假设数组中一共有2n+1个数,n个数出现了两次,一个数出现了一次。

将所有2n+1个数进行异或运算,由于满足交换律,可以假想成重复的两个元素都挨在一起,single number排在最后。

这与乱序数组的异或运算结果是相同的,得到最后一个结果就是singlenumber。

class Solution {public int singleNumber(int[] nums) {int result = 0;for(int i = 0;i<nums.length;i++){result = result ^ nums[i];}return result;}
}