• 剑指56-2 数组中数字出现的次数


    在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

    这道题和上一题很相似,但是因为出现三次,没法使用异或,但是仍然可以使用位运算。

    出现三次的数,他们每一位单独加起来肯定可以被三整除,那么我们只要把所有数的位都加起来,不能被三整除的位合起来就是出现了一次的数。

    注意加的时候如果改为为1那么应该+1,不能直接写成加上与的结果,会导致数很大,超出longlong也是有可能的。

     1 class Solution {
     2 public:
     3     int singleNumber(vector<int>& nums) {
     4         if(!nums.size())
     5             return 0;
     6         int pos[32]={};
     7         int bitmask=1;
     8         for(int i=0;i<31;i++){
     9             for(auto it=nums.begin();it!=nums.end();it++)
    10                 pos[i]+=((*it)&bitmask)?1:0;
    11             bitmask=bitmask<<1;
    12         }
    13         int bit=1,ret=0;
    14         for(int i=0;i<31;i++){
    15             if(pos[i]%3!=0){
    16                 ret+=bit;
    17             }
    18             bit=bit<<1;
    19         }
    20         return ret;
    21     }
    22 };
  • 相关阅读:
    HDFS与YARN HA部署配置文件
    Zookeeper学习(一)
    Kafka学习(一)
    Azkaban(3.x)编译安装使用
    回归问题及应用
    K好数
    最大最小公倍数
    区间K大数查询
    幂方分解
    瓷砖铺放
  • 原文地址:https://www.cnblogs.com/rookiez/p/13258420.html
Copyright © 2020-2023  润新知