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#--SqlDependency监控数据库表的变化
    C#--尝试读取或写入受保护的内存,这通常指示其他内存已损坏。
    C#--lock线程锁
    C#--抽象类(转载)
    ArrayList源码分析
    多线程编程bug起源分析
    Linux-CentOS-Nginx安装
    记一次springMVC的跨域解决方案
    Linux下压缩工具gzip和归档工具tar及其实战shell应用
    Docker在Centos 7上的部署
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5489299.html
Copyright © 2011-2022 走看看