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
相关推荐
syt_biancheng15 分钟前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法
二进制的Liao30 分钟前
【编程】脚本编写入门:从零到一的自动化之旅
数据库·python·算法·自动化·bash
自然数e1 小时前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
云在Steven2 小时前
在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
人工智能·算法·性能优化
前进的李工2 小时前
LeetCode hot100:234 回文链表:快慢指针巧判回文链表
python·算法·leetcode·链表·快慢指针·回文链表
sin_hielo2 小时前
leetcode 3228
算法·leetcode
Chan162 小时前
Java 集合面试核心:ArrayList/LinkedList 底层数据结构,HashMap扩容机制详解
java·数据结构·spring boot·面试·intellij-idea
cheniie3 小时前
【Janet】数据结构
数据结构·janet
xier_ran3 小时前
力扣(LeetCode)100题:41.缺失的第一个正数
数据结构·算法·leetcode
Swift社区3 小时前
LeetCode 425 - 单词方块
算法·leetcode·职场和发展