首页 » 编程之美 » 正文

[leetcode_137]Single Number II

给出n个数,里面每个数字重复3次,只有一个数字只出现一次,求该数字[线性时间和空间]
相信两个数的大家都会,异或就行。
其实最开始用mapA过,觉得不符合题意,看了别人的思路,知道了,其实就是题目的变形,感觉不会举一反三,而且对问题的分析能力不够。
异或的目的就是计数每个位置出现1的个数,如果有两次就清零。
同理,3个数我就出现3次清零。
附上代码:

class Solution {
public:
    int singleNumber(int A[], int n) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        int now = A[0];
        int one = now;
        int two = 0;
        int three = 0;
        for(int i = 1;i < n;i++)
        {
            int input = A[i];
            int in1 = one & input;
            one = one ^ input;
            int in2 = two & in1;
            two = two ^ in1;</p>

<pre><code>        one = one ^ in2;
    }
    return one ^ two;
}
</code></pre>

<p>};

发表评论