剑指 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;
}

 

posted @ 2023-03-03 20:52  盏茶  阅读(18)  评论(0)    收藏  举报