题目地址: https://leetcode.cn/problems/first-missing-positive/description/
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
// 思路:
// 几个不符合的条件
// 1. nums[left] > right 大于应该出现的最大值
// 2. nums[left] <= left 小于应该出现的最小值
// 3. nums[nums[left]-1] == nums[left] 某个元素重复出现
func firstMissingPositive(nums []int) int {
left, right := 0, len(nums)
for left < right {
if nums[left] == left+1 { // 符合条件
left++
} else if nums[left] > right || nums[left] <= left || nums[nums[left]-1] == nums[left] { // 不符合条件
right--
swap(nums, left, right)
} else {
swap(nums, left, nums[left]-1) // 换到正确位置
}
}
return left + 1
}
func swap(nums []int, i, j int) {
nums[i], nums[j] = nums[j], nums[i]
}
361

被折叠的 条评论
为什么被折叠?



