缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
算法分析
常规方法使用哈希表可以实现时间复杂度和空间复杂度都为O(n)的算法。
空间复杂度要达到O(1)需要利用自身数组,这个算法巧妙的利用了数组下标和数值的对应关系,实在是tql!
算法实现
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n=nums.size();
for(int i=0;i<n;i++)
while(nums[i]>0&&nums[i]<n&&nums[i]!=nums[nums[i]-1])
swap(nums[i],nums[nums[i]-1]);
for(int i=0;i<n;i++)
if(nums[i]!=i+1)
return i+1;
return n+1;
}
};