【LeetCode448】Find All Numbers Disappeared in an Array

时间:2019-04-18
本文章向大家介绍【LeetCode448】Find All Numbers Disappeared in an Array,主要包括【LeetCode448】Find All Numbers Disappeared in an Array使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
// class Solution {
// public:
//     vector<int> findDisappearedNumbers(vector<int>& nums) {
//         int siz = nums.size();
//         vector<int> temp(siz, 0);
//         vector<int> result;
//         for(int i = 0; i < siz; ++i){
//             temp[nums[i]-1] = 1;
//         }
//         for(int i = 0; i < siz; ++i){
//             if(!temp[i])
//                 result.push_back(i+1);
//         }
//         return result;
//     }
// };
class Solution{
public:
    vector<int> findDisappearedNumbers(vector<int>& nums){
        int siz = nums.size();
        vector<int> result;
        for(int i = 0; i < siz; ++i){
            int index = abs(nums[i]) - 1;
            nums[index] = nums[index] > 0 ? -nums[index] : nums[index];
        }
        for(int i = 0; i < siz; ++i){
            if(nums[i] > 0)
                result.push_back(i+1);
        }
        return result; 
    }
};

前者省时间,费空间。后者省空间,费时间。

后者的意思是:

nums[i]对应着nums[i]-1这个位置,把这个地方的数字变成相反数,代表这里被占用了。

同时,遍历到该位置时,这里的nums[i]是负数,代表该位置被占用,但是还需要把nums[i]这个数字表征的位置给占用,以你abs(nums[i])-1就是这个位置。