剑指 Offer 53 -II.0~n-1 中缺失的数字
题目描述
解法一
直接遍历,比较数组下标和该下表对应的值
1.如果nums[i] != i,则i是缺失值
2.如果nums[i] = i,则缺失值是n-1
class Solution { public: int missingNumber(vector<int>& nums) { int n = nums.size() + 1; for(int i = 0; i < n - 1; i++){ for(nums[i] != i){ return i; } } return n - 1; } };
解法二
哈希集合
遍历数组nums,将数组中每个元素加入哈希集合,然后一次检查0~n-1的每个数是否在表中,不在的数字即为缺失的数字
class Solution { public: int missingNumber(vector<int>& nums) { unordered_set<int> set; int n = nums.size() + 1; for (int i = 0; i < n - 1; i++) { set.insert(nums[i]); } int missing = -1; for (int i = 0; i <= n - 1; i++) { if (!set.count(i)) { missing = i; break; } } return missing; } };
C++ 哈希集合用法
<1>头文件
# include<unordered_set>
<2> 定义
unordered_set<int> set;
<3>插入元素
set.insert(i);
<4>删除元素
set.erase(i);
<5>查询元素是否存在
set.count(i);
<6>获取元素个数
set.size();
<7>清空
set.clear();
<8>判断是否为空
set.empty();
<9>auto迭代
#include<unordered_set> #include<iostream> using namespace std; int main() { unordered_set<int> set; set.insert(1); set.insert(2); set.insert(3); set.insert(4); for (auto i = set.begin(); i != set.end(); i++) { cout << (*i) <<' '; } system("pause"); return 0; }