First Missing Positive
来源:互联网 发布:新闻发稿平台源码 编辑:程序博客网 时间:2024/06/03 21:59
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.
思路一: 遇到数组的题目,可以先想到排个序问题是不是就简单一点了,又或者排序之后用双指针什么的,又或者想一想可不可以交换数组的数字。 先看看排序之后问题会怎样,将原乱序数组按照升序排列,这样负数在前面,正数在后面,这样的话,遍历一遍数组,找到第一个不为0的数,判断是不是第一个数为1,如果不为1就直接返回1,否则就继续判断下一个数是不是比前一个数大1,不过,数组中可能有数字是重复的,所以要考虑去重。
public class Solution { public int firstMissingPositive(int[] nums) { int n=nums.length; if(n<=0) return 1; Arrays.sort(nums); int pos=0; int i=0; for(;i<n;i++) { if(nums[i]<=0) continue; else break; } if(i==n) return 1; if(nums[i]>=2) return 1; else pos=1; for(int j=i+1;j<n;j++) { if(pos==nums[j]) continue; else if(pos+1==nums[j]) pos=nums[j]; else break; } return pos+1; }}
思路二: 可以利用数组的下标特性,将数组中原来的数字放在它本该在的地方,就是说,如果数组中某一个数字为k,那么就将它放在下标k-1所在的地方(即3放在下标为2的地方,6放在下标为5的地方),对于当前的下标i,如果nums[i]!=i+1; 就把nums[i]放到它应该在的地方,也就是nums[i]应该放在下标为nums[i]-1的地方。将下标为i的数字与下标为nums[i]-1的数字交换,但是要注意,如果当前数字相同,就没有必要交换了,不然会造成死循环。因为交换后nums[i]会一直不等于i+1。一直交换,直到不满足交换条件。
交换条件为
nums[i]>0 && nums[i]!=i+1 && nums[i]
public class Solution { public int firstMissingPositive(int[] nums) { int n=nums.length; if(n<=0) return 1; int i=0; while(i<n) { if(nums[i]>0 && nums[i]!=i+1 && nums[i]<n && nums[i]!=nums[nums[i]-1]) { int temp=nums[i]; nums[i]=nums[nums[i]-1]; nums[temp-1]=temp; }else i++; } int j=0; for(;j<n;j++) { if(j!=nums[j]-1) break; } return j+1; }}
- LeetCode: First Missing Positive
- LeetCode First Missing Positive
- LeetCode: First Missing Positive
- [Leetcode] First Missing Positive
- leetcode12: First Missing Positive
- First Missing Positive
- [LeetCode] First Missing Positive
- [Leetcode] First Missing Positive
- leetcode First Missing Positive
- LeetCode First Missing Positive
- [leetcode] first missing positive
- First Missing Positive
- LeetCode: First Missing Positive
- First Missing Positive
- First Missing Positive
- [LeetCode]First Missing Positive
- First Missing Positive
- First Missing Positive
- 【本博客搬家到www.cdxy.me】
- [Leetcode]Convert Sorted Array to Binary Search Tree
- 阅读笔记:TCP/IP详解卷1
- 内核管理-之进程虚拟内存-基于linux3.10
- 黑马程序员——Swift学习笔记:简介与交互环境
- First Missing Positive
- PHP读取XML数据中CDATA内数值
- BZOJ 1478 Sgu282 Isomorphism 置换
- iOS9 微信支付支付宝支付适配
- cmd下乱码解决
- hdu 4185 Oil Skimming 【最大匹配】
- 求两数之和
- UI07_界面传值
- 常见的网络图像格式有哪些,在HTML中各适合什么场合?