题目如下:

解题思路:这题看起来和【leetcode】448. Find All Numbers Disappeared in an Array很相似,但是有几点不同:一是本题的输入存在负数,二是没有约定输入元素的最大值。那么,怎么可以把本题转换成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 = 0minv = float('inf')for i in nums:if i <= 0:continueminv = min(minv,i)positiveCount += 1if minv < 1:return 1endInx = len(nums)-1for 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] = tendInx = jbreak# nums subarray is nums[:endInx] length = len(nums)for i in xrange(len(nums)):if nums[i] > positiveCount or nums[i] < 0:length = ibreak#nums[:length]  这个子集保存的是所有符合answer的元素i = 0while i < length:if nums[i] >= length:i += 1pass
            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] = srcnums[i] = destelse:i += 1#print nums[:length]for i in xrange(length):if i+1 != nums[i]:return i+1return length+1

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

【leetcode】41. First Missing Positive相关推荐

  1. LeetCode题解41.First Missing Positive

    41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. ...

  2. 【排序+难题】LeetCode 41. First Missing Positive

    LeetCode 41. First Missing Positive 本博客转载自:[1]http://www.cnblogs.com/grandyang/p/4395963.html [2]htt ...

  3. [LeetCode]41.First Missing Positive

    [题目] Given an unsorted integer array, find the first missing positive integer. For example, Given [1 ...

  4. 【LeetCode】剑指 Offer 41. 数据流中的中位数

    [LeetCode]剑指 Offer 41. 数据流中的中位数 文章目录 [LeetCode]剑指 Offer 41. 数据流中的中位数 package offer;import java.util. ...

  5. 【LeetCode】163.Missing Ranges(Medium)(带锁题)解题报告

    [LeetCode]163.Missing Ranges(Medium)(带锁题)解题报告 题目地址:https://leetcode.com/problems/missing-ranges/(带锁题 ...

  6. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  7. 【LeetCode】《剑指Offer》第Ⅴ篇⊰⊰⊰ 39 - 47题

    [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 文章目录 [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 39. 数组中出现次数超过 ...

  8. 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期(Medium)(JAVA)

    [LeetCode]309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期(Medium)(JAVA) 题目地址: https: ...

  9. 【LeetCode】#39组合总和(Combination Sum)

    [LeetCode]#39组合总和(Combination Sum) 加粗样式 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数 ...

最新文章

  1. UIWebView之获取所点位置图片URL
  2. 百兆以太网传输距离_罗森伯格陪你做车载——汽车以太网(三)
  3. [Silverlight入门系列]使用MVVM模式(6):使用Behavior
  4. TensorFlow中RNN实现的正确打开方式
  5. 河北职称计算机2012试题,2012年河北省职称计算机考试试题及答案.doc
  6. 2008 r2彻底删除 server sql_mysql添加列、删除列,创建主键、备份等常用操作总结...
  7. android 按钮点击动画效果_如何用纯css打造类materialUI的按钮点击动画并封装成react组件...
  8. 微服务:更愉快还是更嘈杂?
  9. 【开源.NET】 分享一个前后端分离的轻量级内容管理框架
  10. 从五方面探究智慧城市顶层设计失败原因
  11. [LeetCode] 707.设计链表
  12. 判断机型,支持最新设备(iPhone SE Gen2 和 iPad Pro 11 Gen2、iPad Pro 12.9 Gen4)
  13. Babel 是什么?· Babel 中文文档
  14. [RK3588 Android12]删除谷歌搜索框
  15. 全球LTE终端市场的现状及未来
  16. 05年硕士研究生新生宿舍安排
  17. (二)理解word2vec:实践篇
  18. IAP 促销优惠(promotional offer)后端接入指南
  19. 【补充】膜拜大神——吴恩达(转自Wikipedia)
  20. java学习体会论文_关于学习java的心得体会

热门文章

  1. HTMl5的存储方式sessionStorage和localStorage详解
  2. PHP 函数:intval()
  3. zoj 1109 Language of FatMouse 解题报告
  4. Android Sqite数据库 6
  5. java 计算26个字母在一段文本中出现的频率(保留小数点后4位)
  6. 弹出选择文件夹的对话框 BROWSEINFO 的用法【MFC】
  7. 数据同步的解决方案Canal
  8. php产品效果图,jQuery_基于JQuery制作的产品广告效果,效果图.如下: 动画效果介绍 - phpStudy...
  9. 百度网盘php文件怎么打开,如何通过网页版百度网盘下载大文件
  10. php接口返回一个数组怎末写_php api返回json数组