码迷,mamicode.com
首页 > 其他好文 > 详细

single number和变体

时间:2018-10-16 02:09:26      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:出现   arc   int   star   shm   个数   一起   没有想到   ali   

给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

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

single number和变体

标签:出现   arc   int   star   shm   个数   一起   没有想到   ali   

原文地址:https://www.cnblogs.com/ymjyqsx/p/9795065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!