LintCode: Single Number

C++

(1)异或操作

3^3=0

(2)for (auto &i : Obejuct) {}

 1 class Solution {
 2 public:
 3     /**
 4      * @param A: Array of integers.
 5      * return: The single number.
 6      */
 7     int singleNumber(vector<int> &A) {
 8         // write your code here
 9         int ret = 0;
10         for (auto &i : A) {
11             ret ^= i;
12         }
13         return ret;
14     }
15 };

 

本题扩展

1.一个数组中有两个元素只出现一次,其他所有元素都出现两次,求这两个只出现一次的元素

[解题思路]

将数组所有元素都进行异或得到一个不为0的结果,根据这个结果中的不为0的某一位将数组分成两组

将两组中的元素进行异或,如两个数组的异或值都不为0,则得到最后结果

 

2.一个数组中有一个元素只出现1次,其他所有元素都出现k次,求这个只出现1次的元素

[解题思路]

当k为偶数时,同lss

当k为奇数时,将数组中每个元素的每一位相加mod k,得到结果即位出现1次的元素,时间复杂度O(nlen),空间复杂度为O(1)

posted @ 2016-01-07 13:36  ZH奶酪  阅读(290)  评论(0编辑  收藏  举报