zoukankan      html  css  js  c++  java
  • LeetCode-Single Number II

    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?

    class Solution {
    public:
        void  toTribit(vector<int>& bits,int val){
            
            if(val<0){
                bits[31]=1;
                val=-val;
            }
            else bits[31]=0;
            int ind=0;
            while(val>0){
                bits[ind]=val%3;
                val/=3;
                ind++;
            }
            for(int i=ind;i<bits.size()-1;i++)bits[i]=0;
        }
        void Xor(vector<int>& bits1,vector<int>& bits2){
            for(int i=0;i<bits1.size();i++){
                bits1[i]=(bits1[i]+bits2[i])%3;
            }
        }
        int tribitToInt(vector<int>& bits){
            int ret=0;
            if(bits[31]==1){
                for(int i=bits.size()-2;i>=0;i--){
                    ret*=3;
                    ret-=bits[i];
                }
                if(ret==0)return 0x80000000;
            }
            else{
                for(int i=bits.size()-2;i>=0;i--){
                    ret*=3;
                    ret+=bits[i];
                }
            }
            return ret;
        }
        int singleNumber(int A[], int n) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            vector<int> bits1,bits2;
            if(n<1)return 0;
            bits1.resize(32,0);
            bits2.resize(32,0);
            toTribit(bits1,A[0]);
        //    cout<<tribitToInt(bits1)<<endl;
            for(int i=1;i<n;i++){
                toTribit(bits2,A[i]);
                Xor(bits1,bits2);
            //    cout<<tribitToInt(bits2)<<endl;
            }
            if(n%3==2){
                for(int i=0;i<32;i++){
                    switch(bits1[i]){
                    case 0: bits1[i]=0;break;
                    case 1:bits1[i]=2;break;
                    case 2:bits1[i]=1;break;
                    default:break;
                    }
                }
            }
            return tribitToInt(bits1);
        }
    };
    View Code
  • 相关阅读:
    js实现图片轮播(修改版1)
    动态添加内容到滚动区域
    新闻自动滚动
    多媒体对象(Media Object)
    (Py练习)判断能被几个9整除
    (Py练习)输出乘法口诀表
    (Py练习)输入某年某月判断天数
    文件名称批量修改
    续订Jetbrain学生包
    (Py练习)判断101-200之间的素数个数并输出
  • 原文地址:https://www.cnblogs.com/superzrx/p/3350629.html
Copyright © 2011-2022 走看看