原地哈希
(1)答案肯定在[1, n + 1]之间;
(2)通过原地哈希,将[1, n]的元素对应回数组的[0, n - 1]位置上;
时间复杂度:
空间复杂度:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
for(int i = 0; i < n; i ++){
//在整个外部for循环下,while的swap交换总次数最多为n次,所以时间复杂度为外部for循环的时间复杂度
while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){ //没有在合适的位置
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;
}
}; 
京公网安备 11010502036488号