zoukankan      html  css  js  c++  java
  • LeetCode: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?

    这道题仍然用位运算来做,不过要比那道只用位异或来做的题要复杂得多。还是从数的二进制表示看起,假设数组大小为n,每个数由32位组成,分别把这n个数的第i位相加,然后%3,结果非0即1,结果为0时single one对应的位为0,结果为1时single one对应的位为1,最后返回32位的结果。

     1 class Solution {
     2 public:
     3     int singleNumber(int A[],int n){
     4         int bit=0,temp,i,j;
     5         if(n<0)
     6         {
     7             return -1;
     8         }
     9         for(i=0;i<32;i++)
    10         {
    11             temp=0;
    12             for(j=0;j<n;j++)
    13             {
    14                 temp+=((A[j]>>i)&1);
    15             }
    16             bit|=((temp%3)<<i);
    17         }
    18         return bit;
    19     }
    20 };
  • 相关阅读:
    注册算法入门
    call传参之通过堆栈
    winhex注意
    输入字符串长度
    integer promotion
    网页flash兼容浏览器代码
    逆向工程——注册篇
    esp定律的一点说明
    base64
    意外
  • 原文地址:https://www.cnblogs.com/levicode/p/3858091.html
Copyright © 2011-2022 走看看