268. Missing Number

来源:互联网 发布:地面3d立体画教程知乎 编辑:程序博客网 时间:2024/06/03 17:40

这道题要求找出数组中一个缺失的数字,我看到线性时间和常数空间,先想到的是位操作。

想到了位操作但是不知道怎么用。这里的做法是,把缺失了一个数的数组和不缺失的数组一起异或。相同的数异或为0,那么最后异或的结果就是缺失的那个数。

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

还有一种方法是,把正常情况下数组的和应该是多少算出来,减去现在缺失一个数之后的和,就是缺失的那个数。

正常情况下数组里应该有[0~n]这n+1个数,由于缺一个,所以现在数组里有n个数,所以for循环里有一个等号。

class Solution {public:    int missingNumber(vector<int>& nums) {        int sum = 0;        for(int i = 0; i <= nums.size(); ++i){            sum += i;        }        return sum - accumulate(nums.begin(), nums.end(), 0);    }};


原创粉丝点击