leetcode 41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]

输出:3

示例 2:

输入:nums = [3,4,-1,1]

输出:2

示例 3:

输入:nums = [7,8,9,11,12]

输出:1

提示:

1 <= nums.length <= 5 * 105

-231 <= nums[i] <= 231 - 1

题目链接:链接

思路1,如果是在 [1,n] 范围内,就交换到对应的位置,时间复杂度为 O(n)

python 复制代码
class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        i = 0
        n = len(nums)
        while i < n:
            while nums[i] <= n and nums[i] >= 1 and nums[i] != i+1:
                temp = nums[i]-1
                ### 下一个在合适的位置,不交换
                if temp >= 0 and temp < n and nums[temp] == temp+1:
                    break
                ##### 注意, 这儿不能写成 nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
                nums[i], nums[temp] = nums[temp], nums[i]
            i += 1
        for i in range(n):
            if nums[i] != i+1:
                return i+1
        return n+1
相关推荐
β添砖java6 分钟前
深度优先搜索DFS
算法·深度优先
小糯米6018 分钟前
C++ 并查集
java·c++·算法
IronMurphy8 分钟前
【算法三十四】39. 组合总和
算法·深度优先
重庆小透明9 分钟前
力扣刷题【3】相交链表
算法·leetcode·链表
算法鑫探9 分钟前
C语言实战:学生成绩统计与分析
c语言·数据结构·算法·新人首发
IAUTOMOBILE11 分钟前
Code Marathon 项目源码解析与技术实践
java·前端·算法
Lyyaoo.12 分钟前
【JAVA基础面经】深拷贝与浅拷贝
java·开发语言·算法
x_xbx35 分钟前
LeetCode:202. 快乐数
算法·leetcode·职场和发展
老虎06271 小时前
LeetCode热题100 刷题笔记(第四天)二分 「 寻找两个正序数组的中位数」
笔记·算法·leetcode
_日拱一卒1 小时前
LeetCode:最小覆盖字串
java·数据结构·算法·leetcode·职场和发展