【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了!

 

posted on 2017-07-28 15:45  小言大妖  阅读(217)  评论(0)    收藏  举报