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

题目:[https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/description/]
思路:标记法,由于所有元素当范围在[1,n]之间,所以考虑标记出现过当元素,最后没有出现过当元素即为所求。
代码:

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int len=nums.size();//确定nums的长度
        vector<int> ans;
        int index;
        for (int i=0; i!=len;++i) {//根据元素的内容nums[i],访问元素内容所指索引(nums[i]-1)的元素,并对没访问过的元素内容置负值
            index=abs(nums[i])-1; //确定索引
            nums[index]=nums[index]>0? -nums[index]:nums[index];//访问该索引所指元素,对访问的元素值nums[index]值置负
        }
        for (int i=0;i!=len;++i) {//遍历容器,如果有元素内容为正,即为缺少的值,找到缺少的值输入ans
            if (nums[i]>0) {//元素是否为正(未被访问过)
                ans.push_back(i+1);//为正,将缺少处的索引+1,输入答案
            }
        }
        return ans;
    }
};

反思:1、索引的应用:利用索引标记元素找到特殊元素

posted @ 2018-09-18 17:57  Kipper  阅读(166)  评论(0)    收藏  举报