博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode First Missing Positive
阅读量:6577 次
发布时间:2019-06-24

本文共 1152 字,大约阅读时间需要 3 分钟。

LeetCode解题之First Missing Positive


原题

找出一个无序数组中缺少的最小的正整数。

注意点:

  • 时间复杂度为O(n)
  • 仅仅能使用常数级额外空间

样例:

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

输出: 3

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

输出: 2

解题思路

因为仅仅须要找出缺少的第一个正整数,我们最好还是把全部正数放到相应的位置。再找到第一个位置不匹配的地方原本应该放哪个数。

如上面的样例[1,2,0]就已经排列好了,而[3,4,-1,1]应变为[1,-1,3,4]。分别遍历这两个数组,找到nums[i]!=i+1的位置,假设全部位置都符合,说明全部的数组成了从1開始的连续正整数。

进行排列的方法就是依次遍历每一个数字,把它们放到应该放置的位子。

AC源代码

class Solution(object):    def firstMissingPositive(self, nums):        """        :type nums: List[int]        :rtype: int        """        if not nums:            return 1        i = 0        length = len(nums)        while i < length:            current = nums[i]            if current <= 0 or current > length or nums[current - 1] == current:                i += 1            else:                nums[current - 1], nums[i] = nums[i], nums[current - 1]        for i in range(length):            if nums[i] != i + 1:                return i + 1        return length + 1if __name__ == "__main__":    assert Solution().firstMissingPositive([1, 2, 0]) == 3    assert Solution().firstMissingPositive([1, 2, 3]) == 4    assert Solution().firstMissingPositive([3, 4, -1, 1]) == 2

欢迎查看我的 () 来获得相关源代码。

转载地址:http://veyno.baihongyu.com/

你可能感兴趣的文章
阿里云成中国唯一一家进入Forrester大数据服务榜单的科技公司
查看>>
深度预警:深入理解HBase的系统架构
查看>>
从 Java 到 Scala(一):面向对象谈起
查看>>
JSP第六篇【自定义标签之传统标签】
查看>>
Weex 事件传递的那些事儿
查看>>
Android性能优化:关于 内存泄露 的知识都在这里了!
查看>>
【备战春招/秋招系列】美团面经总结基础篇 (附详解答案)
查看>>
Rokid(全栈语音智能开发套件)开箱记
查看>>
Leetcode 215 First K Largest Element
查看>>
百度啊,你是新年第一惨
查看>>
TensorFlow发布重要更新AutoGraph
查看>>
区块链浅析
查看>>
vux 60秒倒计时
查看>>
[译] 程序员开会的代价
查看>>
should.js源码分析与学习
查看>>
千万级调用量微服务架构实践
查看>>
顶尖架构师与普通程序员最大的5个区别!
查看>>
从JDK角度看对象克隆
查看>>
JDK不同操作系统的FileSystem(Windows)下篇
查看>>
ijkplayer编译so库真没那么难
查看>>