题目描述
思路分析
O(n)空间就开一个hash表
要求O(1)空间,方法是:借用原数组,把原数组变成hash表,也叫原地哈希
代码实现
//O(N)空间
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
unordered_set<int> hash;
for(int i=0;i<nums.size();i++){
hash.insert(nums[i]);
}
for(int i=1;;i++){
if(!hash.count(i)) return i;
}
}
};
//O(1)空间
class Solution {
public:
void swap(vector<int>& a,int l,int r){
int t=a[l];
a[l]=a[r];
a[r]=t;
}
int firstMissingPositive(vector<int>& nums) {
int n=nums.size();
for(int i=0;i<nums.size();i++){
while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]) swap(nums,nums[i]-1,i);
}
for(int i=0;i<n;i++) if(nums[i]!=i+1) return i+1;
return n+1;
}
};