leetcode 448消失的数字

tech2024-01-12  70

要求:时间复杂度为O(n)且不消耗额外的空间

思路:要像一种办法来代表每个数字是否出现过

设a[i] 属于1-n那么 令j=(a[i]-1)mod n, a[j]+=n; 最后遍历一遍数组看看数组中哪个元素<=n,即为未出现过的数字

class Solution { public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> res; if(nums.empty()) return nums; for(int i=0;i<nums.size();i++) { int index=(nums[i]-1)%nums.size(); nums[index]+=nums.size(); } for(int i=0;i<nums.size();i++) { if(nums[i]<=nums.size()) res.push_back(i+1); } return res; } };
最新回复(0)