解法

  1. 使用额外空间的哈希表
    即定义一个大小为n+1的数组,遍历过程将nums[i]作为数组的索引进行++,这样最后为0的值就是我们要找到的索引。

  2. 原地哈希表
    因为哈希表可以用x % n的方式来进行索引定位,所以可以在遍历数组的时候,把定位到的数+n,这样不会改变原有的索引结果。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    vector<int> findMissVec(vector<int> nums) {
    const int n = nums.size();
    for (const auto& num : nums) {
    nums[(num - 1) % n] += n;
    }
    vector<int> res;
    for (int i = 0; i < n; i++) {
    if (nums[i] <= n) {
    res.push_back(i + 1);
    }
    }
    return res;
    }