码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Single Number II

时间:2014-06-10 20:42:48      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

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?

思路:

(所有数的第i位之和)mod 3 = (查找的数的第i位),其中 i = 1,2,...,sizeof(int)*8。

如下算法:如果在你的机器上int是32位,则时间复杂度是O(32n),即线性时间,空间复杂度O(1)

注:

一个数与1(000001)相与得到此数最末位;

一个数与2(000010)相与得到此数次末位;

依次类推,即一个数与相应权重相与得到此数在本权重位的值。

bubuko.com,布布扣
class Solution {
public:
    int singleNumber(int A[], int n) {
        
        int bits = sizeof(int)*8;
        int weight = 1,result=0;

        for(int i =0;i<bits;i++)
        {
           int sum = 0;
           for(int j=0;j<n;j++)
           {
           
             sum += (A[j] & weight)/weight;  // 每个数与权值weight相与得到这个数在权值位上的值,比如weight=2,本句sum得到所有数第2位之和。
           
           }
           result += (sum % 3)*weight; //sum % 3得到要查找的数的权值位的值,再乘权值,就是查找数在权值位代表的真实值。
           weight *= 2;
        
        }

        return result;
    }
};
bubuko.com,布布扣

 

 

[LeetCode] Single Number II,布布扣,bubuko.com

[LeetCode] Single Number II

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/Xylophone/p/3779517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!