zoukankan      html  css  js  c++  java
  • Single Number

    1、Single Number I

     1 class Solution {
     2 public:
     3     int singleNumber(vector<int>& nums) {
     4         if(nums.size()==0) return NULL;
     5         int res=nums[0];
     6         for(int i=1;i<nums.size();i++)
     7         {
     8             res^=nums[i];
     9         }
    10         return res;
    11     }
    12 };

    2、Single Number II

    int 共有32位,假设把所有的数相加,则并且每位上产生的进位不累计进入其他位:

        因为一共只有一位个数为1,其他位个数都为3,则这些数相加,每位上累计个数取余3为0,或者1,最后把这位合并就是个数为1 的数。

       这种做法可以通用,并且只用了两个变量。

     1 class Solution {
     2 public:
     3     int singleNumber(vector<int>& nums) {
     4         int result = 0;
     5         int count =0 ;
     6         for(int i=0; i<32; i++)
     7         {
     8             count =0;
     9             for(int j=0; j<nums.size(); j++)
    10                   count += (nums[j]>>i)&1;
    11             result |= (count%3)<<i;
    12         }
    13              return result;
    14     }
    15 };

    3、Single Number III

     1 class Solution {
     2 private:
     3     int last1(int n)
     4     {
     5           int i=0;
     6           while(((n>>i)&1) == 0)
     7           {
     8               i++;
     9           }
    10           return i;
    11     }
    12     bool isRange(int n, int i)
    13     {
    14         if(((n>>i)&1) ==1)
    15             return true;
    16         else return false;
    17     }
    18 public:
    19     vector<int> singleNumber(vector<int>& nums) {
    20             vector<int> res;
    21             if(nums.size()<2)
    22                   return res;
    23             int num = 0;
    24             for(int i=0; i<nums.size(); ++i)
    25             {
    26                  num = num^nums[i];
    27             }
    28             int n = last1(num);
    29             int a=0, b=0;
    30             for(int j=0; j<nums.size(); ++j)
    31             {
    32                 if(isRange(nums[j], n))
    33                 {
    34                      a = a^nums[j];
    35                 }
    36                 else
    37                 {
    38                      b = b^nums[j];
    39                 }
    40             }
    41             res.push_back(a);
    42             res.push_back(b);
    43             return res;
    44     }
    45 };
  • 相关阅读:
    帮朋友写的两篇文章
    与疯姐的对话
    实现C(i,j)=A(m,n,w)+B(m,n)
    误差处理相关
    http://blog.sina.com.cn/s/blog_4aae007d0100inxi.html
    全局变量和局部变量
    Yeelink:将复杂的传感器以极简的方式组到同一个网络内
    基站分布:GDOP
    C++学习路线图
    Matlab中三点确定质心
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5489299.html
Copyright © 2011-2022 走看看