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、索引的应用:利用索引标记元素找到特殊元素

浙公网安备 33010602011771号