Hash
12/12/25Less than 1 minute
Hash
原地 Hash
public int firstMissingPositive(int[] nums) {
int n = nums.length;
for (int i = 0; i < n; i++) {
while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
}
for (int i = 0; i < n; ++i) {
if (nums[i] != i + 1) {
return i + 1;
}
}
return n + 1;
}public int firstMissingPositive(int[] nums) {
int n = nums.length;
for (int i = 0; i < n; ) {
int idx = nums[i] - 1;
if (nums[i] > 0 && nums[i] <= n && nums[i] != nums[idx]) {
swap(nums, i, idx);
} else {
i++;
}
}
for (int i = 0; i < n; i++) {
if (nums[i] != i + 1) {
return i + 1;
}
}
return n + 1;
}
void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}