LeetCode Hot100 缺失的第一个正数
题目地址: 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]
}