Single Number

来源:互联网 发布:淘宝体检中心打不开 编辑:程序博客网 时间:2024/06/05 16:02

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?
使用排序方法求解:

//通用性好,适合两种情况    int singleNumber(int A[], int n) {        //特殊情况1,2        if(n<=0) return -1;        if(n==1) return A[0];        sort(A, A + n);        int j = 1;        for(int i = 0; i < n - 1; i++)        {            if(A[i] == A[i+1])                j++;            else             {                if(j<2) return A[i];//这里修改为j<3那么就可以适用于single number II了。                j = 1;            }        }        //特殊情况3 最后一个是single number的特殊情况        return A[n-1];    }

使用map求解:

//2014-2-18 update    int singleNumber(int A[], int n)     {        unordered_map<int, bool> ump_ii;        for (int i = 0; i < n; i++)        {            if (!ump_ii.count(A[i])) ump_ii[A[i]] = true;            else ump_ii.erase(A[i]);        }        return ump_ii.begin()->first;    }

使用位运算求解:

//single number 1    int singleNumber(int A[], int n)     {        int ans = 0;        for (int i = 0; i < n; i++) ans ^= A[i];        return ans;    }
//single number 2int singleNumberII_36(int A[], int n){    int ans = 0;    for (int i = 0; i < 32; i++)     {        int c = 0, d = 1<<i;        for (int j = 0; j < n; j++)            if (A[j] & d) c++;        if (c%3) ans |= d;    }    return ans;}
0 0