zoukankan      html  css  js  c++  java
  • 137. Single Number II

    137. Single Number II

     
     
    Total Accepted: 80477 Total Submissions: 214984 Difficulty: Medium

    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?

    Subscribe to see which companies asked this question

    Code:

    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            int ret = 0;
            int mask = 1;
            while(mask)
            {
                int countOne = 0;   //number of digit 1
                for(int i = 0; i < nums.size(); i ++)
                {
                    if(nums[i] & mask)
                        countOne ++;
                }
                if(countOne % 3 == 1)
                    ret |= mask;
                mask <<= 1;
            }
            return ret;
        }
    };

    1. int singleNumber(int A[], int n)  
    2. {  
    3.     int one = 0, two = 0;   //每一位出现一次或者三次的其中一种在one中,每一位出现两次和三次的,都在two中。three中保存位出现三次的。
    4.     for (int i = 0; i < n; i++)  
    5.     {  
    6.         two |= A[i] & one;  //&代表one中是否出现过某一位。
    7.         one ^= A[i];  //^代表当切仅当第奇次出现。 |=  是保存位。
    8.         int three = one & two;  //因为出现了两次的位,one就一定不会出现(异或掉了),所以只有出现三次的位才会在three中出现。
    9.         one &= ~three;  //消除位出现三次的。
    10.         two &= ~three;  
    11.     }  
    12.     return one;  
  • 相关阅读:
    .net破解二(修改dll)
    CLR 的执行模型(2)
    理解数据库的几种键和几个范式
    事务隔离级别如何影响锁
    c#和java中封装字段的不同
    Linux安装AUTOCONF和AUTOMAKE产生的程序的一般步骤
    html锚点使用示例
    webbrowser控件使用时的注意事项
    C#实现单实例运行
    为Exchange 2007 SCC 启用 SCR 副本-供需要的人使用!
  • 原文地址:https://www.cnblogs.com/Alex0111/p/5373811.html
Copyright © 2011-2022 走看看