448. Find All Numbers Disappeared in an Array
作者:互联网
仅供自己学习
思路:
因为题目说不能使用额外的空间,那么只能在原数组进行操作。因为数组的大小为n,所以即使少了一些 1~n的元素,但数组的下标仍然存在,那么我们就可以考虑通过下标来判断哪些元素不存在。因为我们的元素都小于等于n,所以元素-1作为下标并且对该下标的元素进行加n,当数组遍历完成后,存在的数字那么以该数字-1做下标的元素就会大于n,那么不存在的数字-1做下标的元素就会小于等于n,那么我们在遍历一次数组长出小于n的元素的下标再加一即可。
代码:
1 class Solution { 2 public: 3 vector<int> findDisappearedNumbers(vector<int>& nums) { 4 int n=nums.size(); 5 vector<int> res; 6 for(int i=0;i<n;++i){ 7 int index = (nums[i]-1)%n; 8 nums[index] += n; 9 } 10 for(int i=0;i<n;++i){ 11 if(nums[i]<=n) 12 res.push_back(i+1); 13 } 14 return res; 15 } 16 };
标签:448,下标,nums,做下,元素,Disappeared,vector,数组,Array 来源: https://www.cnblogs.com/Mrsdwang/p/14400247.html