268. Missing Number
Difficulty: 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次的元素即为丢失的数。
代码
[C++]
class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] != i)
return i;
}
return nums.size();
}
};
class Solution {
public:
int missingNumber(vector<int>& nums) {
vector<bool> flag(nums.size(), false);
for (int i = 0; i < nums.size(); i++)
flag[nums[i]] = true;
for (int i = 0; i < flag.size(); ++i) {
if (!flag[i])
return i;
}
return nums.size();
}
};