[LeetCode]268 消失的数字

来源:互联网 发布:人气网络3d游戏排行榜 编辑:程序博客网 时间:2024/06/05 03:03

Missing Number(消失的数字)

【难度:Medium】
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.

For example,
Given nums = [0, 1, 3] return 2.

Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
给定一包含从0~n缺了一个数字的数组,使用线性的时间复杂度找到缺少的那个数字。


解题思路

本题利用数学知识来解答,这里介绍两种方法:

  • 1)求出从0~n的累加和,减去数组整体的和,那么由于数组内每个数字不相同,其差就是缺少的那个数字;
  • 2)利用异或运算,将数组全体内容与0~n进行异或,根据异或运算的性质可知最后结果为缺少的那个数字。

c++代码如下:

class Solution {public:    int missingNumber(vector<int>& nums) {        if (nums.empty())            return 0;        int n = nums.size();        int sum = n*(n+1)/2;        int real_sum = 0;        for(int i = 0; i < n; i++) {            real_sum += nums[i];        }        return sum - real_sum;    }};
class Solution {public:    int missingNumber(vector<int>& nums) {        int res = 0;        for (int i = 1; i <= nums.size(); i++) {              res ^= i ^ nums[i-1];         }        return res;    }};
0 0