[leetcode268]Missing Number

来源:互联网 发布:美橙互联 域名转出 编辑:程序博客网 时间:2024/06/06 09:34

Question:

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,1,2】缺少3,比如【0,1,5,4,3,】缺少2。

方法1:

总和求解,可以知道给定的数组加上缺少的数据,是个0~nums.size()中的数据,而缺少的极为其中一员,所以如果不缺少元素,那么数组的和是固定的:即0+1+2+3+。。。+nums.size();而缺少数据的数组总和也可以求出来,那么相减结果即为所求。

方法2:

可以知道给定的数组加上缺少的数据,是个0~nums.size()中的数据,那么可以声明一个大小为nums.size()+1的bool类型的数组,如果数据i在nums中出现,则令bool【i】=true,则可以知道,如果有个bool【m】== false,则缺少的就是m。

方法3:

暴力法,用vector的sort排序,即可知道缺少数据。


代码如下:

<span style="font-size:14px;">class Solution {public:    int missingNumber(vector<int>& nums) {        //用总和求解        int baseSum = 0;        int numsSum = 0;      /*  for(int i : nums){            numsSum += i;        }*/        for(int i = 0; i <= nums.size(); ++i){            if(i < nums.size()){                 baseSum += i;                 numsSum += nums[i];            }            else                baseSum += i;        }        return baseSum-numsSum;        //用bool变量判断出来哪个数据没有出现       /* vector<bool> b(nums.size()+1,false);        for(int i = 0; i < nums.size(); ++i){            b[nums[i]] = true;        }         for(int i = 0; i < nums.size()+1; ++i){             if(!b[i])                return i;         }*/                          //暴力法        /*sort(nums.begin(),nums.end());        if(nums[0] == 0){            int i;            for(i = 0; i < nums.size()-1; ++i){                if((nums[i]+1) != nums[i+1])                    return nums[i]+1;            }            return i+1;        }        else            return 0;*/    }};</span>


0 0
原创粉丝点击