zoukankan      html  css  js  c++  java
  • single number和变体

    给array of integers
    裡面有一个数字是单独出现  其他都会出现两次(而且一起出现)
    ex: [1,2,2,3,3]
    要判断哪个数字是单独出现的
    以这个例子的话就是 1
    LZ 一开始先说了用HashMap 去记出现几次
    面试官说有没有不用额外空间的方式
    我说 那就用XOR 去算吧   剩下来的那个就是单独出现的了  複杂度是O(N)
    面试官说可以,但是希望再想其他方式可以优化的 比如说O(logN)複杂度
    看到logN就想到binary serach了
    不过一时没有想到怎麽个search法
    面试官给了提示才推出来的
    结论就是用index是基数或偶数 来判断 search砍半时应该往前找或往后找
    //XOR版本
    
    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            int length = nums.size();
            int num = 0;
            for(int i = 0;i < length;i++)
                num ^= nums[i];
            return num;
        }
    };
    
    
    class Solution{
    public:
        int singleNumber(vector<int>& nums){
            return single_core(nums,0,nums.size()-1);
        }
        int single_core(vector<int> nums,int start,int end){
            if(start == end)
                return nums[start];
            int length = end - start + 1;
            int mid = length/2;
            if((length/2)%2 == 0){
                if(nums[i] == nums[i-1])
                    return single_core(nums,start,mid);
                if(nums[i] == nums[i+1])
                    return single_core(nums,mid,end);
            }
            else{
                if(nums[i] == nums[i-1])
                    return single_core(nums,mid+1,end);
                if(nums[i] == nums[i+1])
                    return single_core(nums,start,mid-1);
            }
        }
    }

    偶数:12233、22331

    奇数:2233441、1223344

    那个单独的数一定是在奇数个中

  • 相关阅读:
    Java实战项目收集
    Drebin数据集
    网络“法官”
    沉醉
    孔方兄
    《Qt 5.9 C++开发指南》例程源码
    《论语》中那些耳熟能详的词汇
    破祟
    Qt使用UI编辑器添加的控件Icon运行时不显示
    Ubuntu格式化SD卡
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9795065.html
Copyright © 2011-2022 走看看