package top100liked import "testing" // https://leetcode.cn/problems/first-missing-positive/description/?envType=study-plan-v2&envId=top-100-liked func firstMissingPositive(nums []int) int { n := len(nums) for i := range nums { for nums[i] >= 1 && nums[i] <= n && nums[i] != i+1 { if nums[i] != nums[nums[i]-1] { // 关键条件,否则会死循环 [1, 1] nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i] } else { break } } } for i, v := range nums { if v != i+1 { return i + 1 } } return n + 1 } func TestS17(t *testing.T) { // println(firstMissingPositive([]int{1, 2, 0})) // println(firstMissingPositive([]int{3, 4, -1, 1})) // println(firstMissingPositive([]int{7, 8, 9, 11, 12})) println(firstMissingPositive([]int{1, 1})) }