题目:
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
代码:
class Solution { public: int singleNumber(vector<int>& nums) { int result = 0; for (size_t i = 0; i < nums.size(); ++i) result ^= nums[i]; return result; } };
Tips:
核心思想是用异或运算。
1. 异或运算满足结合律、交换律;结合这两条定律。
2. 出现偶数次的数最终都会对冲掉,成为0;最后剩下那个只出现奇数次的数
3. 任何数与0异或都是其本身
=========================================
第二次过这道题,一次AC,考查的是位运算的技巧。
class Solution { public: int singleNumber(vector<int>& nums) { int single = 0; for ( int i=0; i<nums.size(); ++i ) single = single ^ nums[i]; return single; } };