Description
给定一个长度为
要求时间复杂度
Constraints
Solution
使用置换法,将数值
由于每次交换必能使其中一个位置正确归位,至多交换
由于还有off-by-one问题,因此需要修正一下偏移量,使得范围统一为
关联:287。
Code
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
auto off = nums.data() - 1;
auto n = nums.size();
for(int i = 1; i <= n; ++i) {
while(off[i] >= 1 && off[i] <= n
&& off[i] != off[off[i]])
swap(off[i], off[off[i]]);
}
for(int i = 1; i <= n; ++i) {
if(off[i] != i) return i;
}
return n+1;
}
};