448. 找到所有数组中消失的数字

自己思路代码:

class Solution {
public:
    vector findDisappearedNumbers(vector& nums) {
        int n = nums.size();
        int hashTable[100010] = {0};
        int i = 0;
        for(i = 0; i < nums.size(); i++){
            hashTable[nums[i]]++;
        }
        vector ans;
        for(i = 1; i<= n; i++){
            if(hashTable[i] == 0){
                ans.push_back(i);
            }
        }
        return ans;
    }
};

运行结果

448. 找到所有数组中消失的数字_第1张图片

 

官方题解思路:

不另外设置哈希表,而是让自己充当哈希表。

448. 找到所有数组中消失的数字_第2张图片

 例,遍历 nums[0],这里数字为 4,那么就让代表 下标为 4-1 的数字 + n。这样遍历完一圈之后。又因为当对应数字+n之后,它数组下标可能会大于8,所以在访问下标的时候,需要对8取模。

448. 找到所有数组中消失的数字_第3张图片

这样就可以看出来哪个数字没有在数组中出现了。

代码:

class Solution {
public:
    vector findDisappearedNumbers(vector& nums) {
        int n = nums.size();
        int i = 0;
        for(i = 0; i < n; i++){
            int x = (nums[i]-1) % n;
            nums[x] += n;
        }
        // 创建存储 没出现过的数字的数组
        vector ans;
        for(i = 0; i < n; i++){
            if(nums[i] <= n){
                ans.push_back(i+1);
            }
        }
        return ans;
    }
};

 运行结果:

448. 找到所有数组中消失的数字_第4张图片

 

你可能感兴趣的:(LeetCode,算法,leetcode,数据结构)