Missing Number解题报告

来源:互联网 发布:好莱坞爱情电影知乎 编辑:程序博客网 时间:2024/06/01 09:19

https://leetcode.com/problems/missing-number/

题目描述参见链接

这道题开始我没看懂,后来发现是要找0到n中的漏掉的数字,因为0到n有n+1个数字但是数组只有n个所以肯定会漏掉一个,开始我想的是排序然后遍历或者二分查找,但是排序时间复杂度就高了。所以我看了别人的做法,现在有三种思路:

第一种是求和,差值就是漏掉的那个:

class Solution {public:    int missingNumber(vector<int>& nums) {        int sum=0;        int n=nums.size();        for(int i=0;i<nums.size();i++){            sum+=nums[i];        }        return n*(n+1)*0.5-sum;    }};
第二种是按位异或,因为相同的数字都异或成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;    }};
还有一种就是二分查找,这个时间复杂度虽然高,但是当数组是排序的以后效率会高很多:

class Solution {public:    int missingNumber(vector<int>& nums) {        sort(nums.begin(), nums.end());        int left = 0, right = nums.size();        while (left < right) {            int mid = left + (right - left) / 2;            if (nums[mid] > mid) right = mid;            else left = mid + 1;        }        return right;    }};



0 0