Flip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public int firstMissingPositive(int[] nums) { for (int i = 0; i < nums.length; i++) { if (nums[i] <= 0) { nums[i] = nums.length + 1; } }
for (int i = 0; i < nums.length; i++) { int abs = Math.abs(nums[i]); if (abs <= nums.length) { int targetIndex = abs - 1; nums[targetIndex] = nums[targetIndex] > 0 ? -nums[targetIndex] : nums[targetIndex]; } }
for (int i = 0; i < nums.length; i++) { if (nums[i] > 0) { return i + 1; } }
return nums.length + 1; } }
|
Hash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { public int firstMissingPositive(int[] nums) {
for (int i = 0; i < nums.length; i++) { int targetIndex = nums[i] - 1; while (targetIndex >= 0 && targetIndex < nums.length && nums[i] != nums[targetIndex]) { swap(nums, i, targetIndex); targetIndex = nums[i] - 1; } }
for (int i = 0; i < nums.length; i++) { if (nums[i] != i + 1) { return i + 1; } }
return nums.length + 1; }
private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
|
References
41. First Missing Positive