题意:
解题思路:
思路:交换位置法1. 保证1出现在nums[0],2出现在nums[1]的位置上,n出现在nums[n-1]的位置上;2. [3,4,-1,1]最终交换得到[1,-1,3,4];3. 重新遍历[1,-1,3,4],找到第一个不在该位置的数:nums[i] != i + 1;4. 最红循环到i = 1,正确结果应该是2,但数组中结果为-1,所以缺失的数字就是i + 1 = 2;
PHP代码实现:
class Solution { function firstMissingPositive($nums) { for ($i = 1; $i > 0; $i++) { if (!in_array($i, $nums)) return $i; } } function firstMissingPositive1($nums) { if (!$nums) return 1; for ($i = 0; $i < count($nums); $i++) { while ($nums[$i] > 0 && $nums[$i] != $nums[$nums[$i] - 1]) { $temp = $nums[$nums[$i] - 1]; $nums[$nums[$i] - 1] = $nums[$i]; $nums[$i] = $temp; } } for ($i = 0; $i < count($nums); $i++) { if ($nums[$i] != $i + 1) return $i + 1; } return count($nums) + 1; }}
GO代码实现:
func firstMissingPositive(nums []int) int { n := len(nums) for i := 0; i < n; i++ { for nums[i] > 0 && nums[i] < n && nums[nums[i] - 1] != nums[i] { nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1] } } for i := 0; i < n; i++ { if nums[i] != i + 1 { return i + 1 } } return n + 1}