LeetCode探索之旅(74)-268遗漏的数

今天继续刷LeetCode,第268题,给定一个0-n的数组,求遗漏的数

分析:
方法一:输入的是0-n的乱序数组,长度为n,那么要找出其中遗漏的数,可以先将数组进行排序,然后遍历整个数组,出现下标与元素不匹配的时候,就是遗漏的数,这个需要两次遍历数组,时间开销比较大。
方法二:如何在一次遍历的情况下,就得到结果呢。根据数据元素的特性,先求和0-n的所有数的和,然后遍历整个数组,并且从和中减去每个元素,最后得到的结果就是遗漏的数,结果显示还可以有更好的方法。
方法三:通过按位与的方式,将所有元素值与下标进行按位与,得到的结果就是缺失的那一个,但是仍然需要遍历整个数组,可是时间开销就小了很多。

问题:
1、与操作会比四则运算快;

附上C++代码1:

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

附上C++代码2:

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

附上Python代码:

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        n=len(nums)
        return n*(n+1)//2-sum(nums)

猜你喜欢

转载自blog.csdn.net/JerryZengZ/article/details/89295227