【LeetCode】136.Single Number
原题地址:https://leetcode.com/problems/single-number/tabs/description
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?
想法:
1.由于不能使用额外的空间,首先想到的是用sort()将数组排序,然后去比较相邻的数字即可。
代码如下:
1 class Solution { 2 public: 3 int singleNumber(vector<int>& nums) { 4 if (nums.size() == 1) return nums[0]; 5 sort(nums.begin(), nums.end()); 6 for (int i = 1; i < nums.size(); ++i) { 7 if (nums[i] == nums[i - 1]) ++i; 8 else return nums[i - 1]; 9 } 10 } 11 };
然后就不幸的报了超时错误,其实也应该可以想到的,毕竟用了排序,时间会很长。
2.然后就想其他方法,记得《程序员面试金典》中位操作一章有提到(p55):常见的位操作:获取、设置、清楚及更新数据,这道题不正是要获取一个比较“另类”的数字吗?
于是想到用亦或(XOR)操作,代码如下:
1 class Solution { 2 public: 3 int singleNumber(vector<int>& nums) { 4 int res = 0; 5 for (int i = 0; i < nums.size(); ++i) { 6 res ^= nums[i]; 7 } 8 return res; 9 } 10 };
然后就AC了!