LeetCode268——MissingNum

  简单得很,但是我发现我的算法效率很低,其实还有很多地方需要完善的。一次排序,便利查找。发现了就返回。思路简单,效率嘛堪忧。

class Solution {
public:
    int missingNumber(vector<int>& nums)
    {
        sort(nums.begin(),nums.end());
        for(int i = 0;i != (nums.size() + 1);++ i)
        {
            if(i != nums[i])
            {
                return i;
            }
        }
    }
};

   上次聊到一个异或操作,我发现找数用这个特别方便,因为最大自然数我们已经知道了,就是nums的长度。那么最大的这个自然数,和0异或操作后得到0或者1,再用这个结果和nums中存储的数进行异或,假设这个数存在那么返回的就是0,假设这个数不存在返回的就是这个数。

class Solution {
public:
    int missingNumber(vector<int>& nums)
    {
        int len = nums.size();
        int xOR = len;
        for(int i = 0;i != len;++ i)
        {
            xOR ^= i;
            xOR ^= nums[i];
        }
        return xOR;
    }
};

  卧槽,好像效率有所提高。不过这都是瞎猫抓死耗子,没点技术含量啊。

posted on 2015-12-07 16:46  MMac  阅读(202)  评论(0编辑  收藏  举报

导航