题目
解析
- 所有元素只有两个出现一次,其余的出现两次,那么对所有的元素求异或和,那么最后求出来的肯定是
出现过一次元素的异或和
- 接着,因为这两个元素不同,所以,这两个数字的异或和肯定有一位为1,假设第k位为1
- 那么将第k位为1的分为一堆,其余的分为另一堆
- 接下来的问题就是
列表中只有一个出现一次的数字,其余的出现两次
这个问题了【释】:这两堆肯定是第k位为1的为一堆,该堆中只有一个出现过一次,其余的数出现两次,最后,对这两堆分别求异或和就可以求出来了
代码1
1 | vector<int> singleNumber(vector<int>& nums) { |
代码2
1 | vector<int> singleNumber(vector<int>& nums) { |