博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】41. First Missing Positive
阅读量:7039 次
发布时间:2019-06-28

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

题目如下:

解题思路:这题看起来和很相似,但是有几点不同:一是本题的输入存在负数,二是没有约定输入元素的最大值。那么,怎么可以把本题转换成448题的场景呢?首先,我们可以求出输入数组nums中所有正整数的数量,记为p,那么显然能得出这个结论:1 <=answer < p+1。然后,我们可以通过交换把所有值不在这个区间内的元素值移动到数组的后半部分。记nums前半部分[0:length]为符合answer取值区间的元素,既然已经得到了这个区间,那么就可以模仿448题的方法再次交换,使得元素的值和下标匹配。

代码如下:

class Solution(object):    def firstMissingPositive(self, nums):        """        :type nums: List[int]        :rtype: int        """        positiveCount = 0        minv = float('inf')        for i in nums:            if i <= 0:                continue            minv = min(minv,i)            positiveCount += 1        if minv < 1:            return 1        endInx = len(nums)-1        for i in xrange(len(nums)):            if nums[i] <= 0 or nums[i] > positiveCount:                for j in xrange(endInx,i,-1):                    if nums[j] > 0 and nums[j] <= positiveCount:                        t = nums[i]                        nums[i] = nums[j]                        nums[j] = t                        endInx = j                        break        # nums subarray is nums[:endInx]         length = len(nums)        for i in xrange(len(nums)):            if nums[i] > positiveCount or nums[i] < 0:                length = i                break        #nums[:length]  这个子集保存的是所有符合answer的元素        i = 0        while i < length:            if nums[i] >= length:                i += 1                pass
elif nums[i]-1 != i and nums[nums[i]-1] != nums[i]: # 记 nums = [1,1,2] ,第二个1是否要移动到下标为0的位置,要判断下标为0的元素是否已经和下标匹配
src = nums[i]                dest = nums[nums[i]-1]                nums[nums[i]-1] = src                nums[i] = dest            else:                i += 1        #print nums[:length]        for i in xrange(length):            if i+1 != nums[i]:                return i+1        return length+1

 

转载于:https://www.cnblogs.com/seyjs/p/9303832.html

你可能感兴趣的文章
委托的异步编程和同步编程的使用( Invoke 和BeginInvoke)
查看>>
转载 iphone 获取iPhone用户手机号
查看>>
简单springmvc在Eclipse的Tomcat上部署404error,直接在Tomcat上部署可以访问
查看>>
17.文件上传、下载
查看>>
微信推出网页开发调试工具,方便广大微信开发工程师上线调试
查看>>
前端会遇到的算法
查看>>
apue第16章笔记
查看>>
4、android xml中drawableTop(drawableBoottom、drawableLeft、drawableRight)在java代码中的动态配置...
查看>>
Linux下安装、启动MySQL
查看>>
c语言的几点心得,变量的深入理解
查看>>
GDUT2017校赛:Problem H: tmk买礼物(思维)
查看>>
Django modles 建表常用字段
查看>>
redis和spring集成
查看>>
使用C#开发ActiveX控件
查看>>
排列问题
查看>>
8-3下载inception-v3时遇到的问题
查看>>
如何关闭WordPress后台的主题、插件、版本更新通知?
查看>>
设计模式之简单工厂模式
查看>>
(转) linux虚拟机中和主机三种网络连接方式的区别
查看>>
搜索 + 剪枝 --- POJ 1101 : Sticks
查看>>