给定一个包含从0,1,2,...,n中取出的n个不同数字的数组,找到数组中缺少的数字。

来源:互联网 发布:企业专利数据库 编辑:程序博客网 时间:2024/06/05 15:28

本题源自leetcode 268

-------------------------------------------------------------

思路:用 异或 操作符、俩个相同的数异或等于0 ,与 0  异或等于自身。

代码:

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

思路2: 排序 二分查找。排序后,对应的数在数组对应的位置上

代码:

int missingNumber(vector<int>& nums) {        int n = nums.size();        sort(nums.begin(),nums.end());        int left = 0;        int right = n;        while(left < right){            int mid = (left + right) >> 1;            if(mid < nums[mid])                right = mid;            else                 left = mid + 1;        }        return left;    }

思路3: 求和法。

代码

  int missingNumber(vector<int>& nums) {        int sum = 0;        int n = nums.size();        for(int num : nums){            sum += num;        }        return (n * (n + 1))/2 - sum;    }


阅读全文
0 0