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
相关推荐
进击的荆棘36 分钟前
优选算法——滑动窗口
c++·算法·leetcode
csdn_aspnet42 分钟前
奈飞工厂算法:个性化推荐系统的极限复刻
算法·netflix·奈飞
小白_ysf43 分钟前
Vue 中常见的加密方法(对称、非对称、杂凑算法)
前端·vue.js·算法
多米Domi0112 小时前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
L_090710 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++
A_nanda11 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
代码雕刻家12 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov12 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业14 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
划破黑暗的第一缕曙光14 小时前
[数据结构]:5.二叉树链式结构的实现1
数据结构