leetcode448——巧用符号标注已出现数字

题目链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/

思路:对于出现的数字将其标注为负数,if(nums[abs(nums[i])-1]>0)nums[abs(nums[i])-1]*=-1

注意:1.因为可能本身该位数字已经为负数,只有加上abs才能找到正确置为负数的下标。

2.本身值为负数代表该位数字已出现过,无需再乘以-1

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int len=nums.size();
        vector<int>result;
        for(int i=0;i<len;i++)
        {
            if(nums[abs(nums[i])-1]>0)
            {
                nums[abs(nums[i])-1]*=-1;
            }
        }
        for(int i=0;i<len;i++)
        {
            if(nums[i]>0)
            {
                result.push_back(i+1);
            }
        }
        return result;
    }
};

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页