leetcode: Single Number II

来源:互联网 发布:log4j打印sql日志 编辑:程序博客网 时间:2024/05/22 05:28

Given an array of integers, every element appears three times except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

one记录到当前处理的元素为止,二进制1 出现“1次”(mod 3之后的1)的有哪些二进制位;用two记录到当前计算的变量为止,二进制1 出现“2次”(mod 3之后的2)的有哪些二进制位。当onetwo中的某一位同时为1 时表示该二进制位上1 出现了3 次,此时需要清零。即用二进制模拟三进制运算。最终one记录的是最终结果。 

class Solution {public:    int singleNumber(int A[], int n) {        int ones = 0, twos = 0, threes = 0;        for( int i = 0; i < n; ++i){            threes = twos & A[i];            twos |= ones & A[i];            ones |= A[i];                        twos = twos & ~threes;            ones = ones & ~threes;        }        return ones;    }};


0 0
原创粉丝点击