Single Number I & II

来源:互联网 发布:arm linux gcc官网 编辑:程序博客网 时间:2024/04/29 08:15

Single Number

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?

Single Number II

 

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?

如果我自己想的话,大概想不出来这两道题该如何做,感觉自己还需要更宽广的思维...

这两道题的核心思想就是利用二进制的性质,将每一个数都拆成二进制位来计数.

Single Number

class Solution {public:    int singleNumber(int A[], int n) {        int res = 0;        for(int i = 0; i < n; i++)        {        res ^= A[i];        }        return res;    }};

Single Number II

 
class Solution {public:    int singleNumber(int A[], int n) {        int bit[32];        for(int i = 0; i < 32; i++)        {            bit[i] = 0;        }        for(int i = 0; i < n; i++)        {            for(int j = 0; j < 32; j++)            {            bit[j] += (A[i] >> j) & 1;            }        }        int res = 0;        for(int i = 0; i < 32; i++)        {            bit[i] %= 3;            res += (bit[i] > 0 ? 1 : 0) << i;        }        return res;    }};

0 0
原创粉丝点击