zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):041-First Missing Positive

    题目来源:

      https://leetcode.com/problems/first-missing-positive/


    题意分析:

      题目给出定一个数组nums,输出第一个缺失的正数。要求时间复杂度为O(n),空间复杂度是O(1).


    题目思路:

      这题是个人觉得是很难的题目,我想了好久都没有想到怎么做。根据网上的答案才做出来的。这个是一个桶排序的扩展。具体的思想就是把对应的数放到对应的位置,比如第一个数放1,第i个数放i+1.具体做法是,从数组第一个数开始,如果这个数不满足nums[i] == i + 1,那么他和第nums[i + 1]上的数互换,直到nums[i] == i +1 或者他小于等于0或者他大于数组的长度。由于每换一次,至少有一个位置满足nums[i] = i + 1。所以最多要换n次,所以时间复杂度是(O(n))。由于没有用额外的空间,那么满足题目要求。


    代码(python):

      

     1 class Solution(object):
     2     def firstMissingPositive(self, nums):
     3         """
     4         :type nums: List[int]
     5         :rtype: int
     6         """
     7         size = len(nums)
     8         i = 0
     9         while i < size:
    10             if nums[i] != i + 1 and nums[i] > 0 and nums[i] <= size and nums[i] != nums[nums[i] - 1]:
    11                 tmp = nums[i] - 1
    12                 nums[i],nums[tmp] = nums[tmp],nums[i]
    13             else:
    14                 i += 1
    15         for i in range(size):
    16             if nums[i] != i + 1:
    17                 return i + 1
    18         return size + 1
    View Code

    转载请注明出处:http://www.cnblogs.com/chruny/p/4934279.html

  • 相关阅读:
    vue 如何点击按钮返回上一页
    vue遍历数组和对象的方法以及他们之间的区别
    css隐藏滚动条
    DOM编程以及domReady加载的几种方式
    修改默认滚动条默认样式
    面试题集锦
    正则表达式
    闭包及应用以及顺序处理ajax请求
    实现自己的(模仿jquery)toggle函数
    Asp.Net与SEO Viewstate优化终极解决方案
  • 原文地址:https://www.cnblogs.com/chruny/p/4934279.html
Copyright © 2011-2022 走看看