剑指offer 0到n-1中缺失的数字【简单易懂,代码可以直接运行】
题目描述
一个长度为 n−1 的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 0 到 n−1 之内。
在范围 0 到 n−1 的 n 个数字中有且只有一个数字不在该数组中,请找出这个数字。
思路:这个题是有序数组中缺少了一个元素,这样我们可以一次遍历这个数组的长度将其放到一个无序集合unordered_set,然后依次迭代这个数组中的元素,用unordered_set的erase操作,根据传入的键将其对应的值删掉。
这里介绍一下unordered_set,这是一个STL容器,无序集合,特点就是集合每一个值都有对应的键值,而键值就是该值本身
再介绍一个erase函数,是unordered_set中用来根据键值来删除对应值的函数
这样我们们重看思路就理清楚思路了,无非就是先根据数组长度将不缺少数字的数组放入到无序集合中,然后利用迭代x : nums循环,在循环体内l利用erase将传入的键值x对应的值删去,剩余的部分即是我们想要找的元素。
点个👍吧,秋梨膏
代码如下:
class Solution {
public:
int getMissingNumber(vector<int>& nums) {
unordered_set<int> s;
for(int i = 0;i <= nums.size();i++)
s.insert(i);
for(auto x : nums) s.erase(x);
return *s.begin();
}
};
点个👍吧,秋梨膏