您的位置:首页 > 其它

[leetcode268]Missing Number

2016-03-03 23:10 302 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: