image.png
找到数组中缺少的第一个正整数
emmm,类似将每个相应的正整数放到正确的位置上的做法,比如1应该放到0位置,5应该放到4位置,然后在遍历一遍,一旦发现某个位置上的数不是当前索引+1,就返回索引值+1即可,类似桶排序的思想。
public static 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]) {
swap(nums, i, nums[i] - 1);
}
}
for (int i = 0; i < n; i++) {
if (nums[i] != i + 1) {
return i + 1;
}
}
return n + 1;
}
public static void swap(int[] nums, int lo, int hi) {
int tmp = nums[lo];
nums[lo] = nums[hi];
nums[hi] = tmp;
}