您的位置:首页 > 其它

LeetCode 268. Missing Number

2017-04-06 16:47 411 查看
题目:

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,…,n,删掉了一个数字,找出删掉的数。

先将数组排个序,如果最后一个数比size大1,那么删掉的是最后一个数;如果第一个数是1,那么删掉的数是0;否则就利用size求原来数组的和(size*(size+1)/2),减去删掉数后的总和,就是删掉的数。

代码:

class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());//先将数组排个序
size_t size=nums.size();
if(nums[size-1]==size-1){//果最后一个数比size大1,那么删掉的是最后一个数
return size;
}
else if(nums[0]==1){//如果第一个数是1,那么删掉的数是0
return 0;
}
else{
int oldsum=size*(size+1)/2;//利用size求原来数组的和(size*(size+1)/2)
int newsum=0;
for(int i=0;i<size;++i){//删掉数后的总和
newsum+=nums[i];
}
return oldsum-newsum;//两个一减就是删掉的数
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: