zoukankan      html  css  js  c++  java
  • [LeetCode OJ] Single Number之二 ——Given an array of integers, every element appears THREE times except for one. Find that single one.

     1 class Solution {
     2 public:
     3     int singleNumber(int A[], int n) {
     4         int bits = sizeof(int)*8;
     5         int result=0;
     6         for(int i=1; i<=bits; i++)
     7         {
     8            int w=0;
     9            int t=1;
    10            
    11            for(int j=0; j<n; j++)
    12                w += (A[j]>>(i-1))&t;
    13            result+= (w%3)<<(i-1);  //若是除过一个数之外,其他数重复k次,则将此处的3改为k
    14         }
    15         return result;
    16     }
    17 };

    利用二进制的位运算来解决这个问题,比如输入的数组是[2,2,3,2]

    它们对应的二进制为:

    0010    (2)

    0010    (2)

    0011    (3)

    0010    (2)

    ————

    对应位求和后:0 0 4 1

    将所有的整数对应的二进制位加起来,再求除以3之后的余数,得到0011 (3),这就是我们要找的single number。

    对于除一个整数只出现一次,其他整数都出现k次(k=2,3,4...),要求找到single number这种问题,也可以用上面位运算的方法来解决,只需将程序中的3改为k即可。

  • 相关阅读:
    shell编程——循环执行
    ubuntu 设置管理 集锦
    27. 计算FPS
    29 GameProject4(+GUI)
    26. D3D显示文本
    30. D3D特效
    28. GUI
    32. 细节映射
    25. GameProject3
    Direct3D渲染到纹理 (部分转)
  • 原文地址:https://www.cnblogs.com/Marrybe/p/3779671.html
Copyright © 2011-2022 走看看