Loading... 要找到缺失的第一个正数,就可以把数组范围内的 nums[i] 放到 nums[i]-1 的位置上去,比如 2 放到 1, 3 放到 2,那么最后交换好的数组从头到尾遍历的第一个 nums[i] != i+1 的位置即为缺失的第一个正数。 因为这样做最多只产生 n 次 swap,所以最终时间复杂度仍然是 O(n) ```go func firstMissingPositive(nums []int) int { n := len(nums) for i := range nums { 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, v := range nums { if v != i+1 { return i+1 } } return n+1 } ``` Last modification:July 20, 2025 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏