1.题目
2.思路
一定要审题——第一句话:数组元素的值在1~n范围内,并且n为数组的大小,就是说“没出现”的元素虽然不在,但是数组是开够空间给他们。
题目要求不能使用额外空间(用来存结果的ans数组除外)。
若能使用额外空间,那就是常规的使用哈希表。
而现在为了不光明正大使用哈希表,就让nums数组“成为哈希表”,以每个数组元素为下标的数组元素增加n,而再次遍历nums数组时,如果nums[i]没大于n,则肯定没有遇到i+1(存入ans数组中)。
PS:注意加1减1的边界问题。
3.代码
class Solution { public: vector<int> findDisappearedNumbers(vector<int>& nums) { int n=nums.size(); vector<int>ans; for(int i=0;i<n;i++){ int k=(nums[i]-1)%n; nums[k]+=n; } for(int i=0;i<n;i++){ if(nums[i]<=n){ ans.push_back(i+1); } } return ans; } };