最蛋疼是要求
常数空间复杂度
O(N)时间复杂度
常量空间复杂度去处理数组问题,一般思路就是元素交换。
/*
* @lc app=leetcode id=41 lang=cpp
*
* [41] First Missing Positive
*/
// @lc code=start
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int N = nums.size();
int loc = 0;
while(loc < N){
if(nums[loc] == loc+1){
loc++;
continue;
}
if(nums[loc] <= 0 || nums[loc] > N || nums[nums[loc]-1] == nums[loc]){
nums[loc++] = 0;
continue;
}
swap(nums[loc],nums[nums[loc]-1]);
}
for(int i=0;i<N;i++){
if(nums[i] == 0) return i+1;
}
return N+1;
}
};
// @lc code=end