leetcode:First Missing Positive
来源:互联网 发布:淘宝seo搜索优化工具 编辑:程序博客网 时间:2024/05/29 18:15
原题:
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.
分析: 给定一个未排序的数组,找到第一个未出现的正整数,要求时间复杂度为O(n),常数大小的空间
由题给条件,先在原有数组上对其进行排序,需要设定一个辅助变量。
思路是对某一位置上的元素与其应该在的位置元素进行交换,直到该位置上的数是其自己的数,有点绕,下面举例分析
例如数组[3,4,-1,1]
首先是一个位置元素nums[0]=3,3应该在nums[2]的位置上,所以3与nums[2]上的元素进行交换,用一个辅助变量temp保存替换下来的值-1,这样数组变成了[3,4,3,1],发现temp=-1<0,不用管它.
然后是第二个位置num[1]=4,应该在nums[3]位置上,将nums[1]和nums[3]交换,temp保存替换下来的nums[3]=1
当前状态:数组变为[3,4,3,4],temp=1,
1应该在nums[0]的位置上,所以nums[0]=1,此时temp=3,数组变为[1,4,3,4]
3应该在nums[2]的位置上,发现nums[2]=3,实在他应该在的位置上,退出循环。
然后接着向下遍历,最后数组上的元素应该都是对应位置上应该有的数,再对其进行遍历,遇到nums[i]!=i+1的情况就是缺失的正整数。
Java实现:
public class Solution { public int firstMissingPositive(int[] nums) { for(int i=0;i<nums.length;i++){ while(nums[i]!=i+1){ if(nums[i]<=0 ||nums[i]>=nums.length|| nums[i]==nums[nums[i]-1]) break; int temp =nums[i]; nums[i] = nums[nums[i]-1]; nums[temp-1] = temp; } } for(int i=0;i<nums.length;i++){ if(nums[i]!=i+1) return i+1; } return nums.length+1; }}
- LeetCode: First Missing Positive
- LeetCode First Missing Positive
- LeetCode: First Missing Positive
- [Leetcode] First Missing Positive
- [LeetCode] First Missing Positive
- [Leetcode] First Missing Positive
- leetcode First Missing Positive
- LeetCode First Missing Positive
- [leetcode] first missing positive
- LeetCode: First Missing Positive
- [LeetCode]First Missing Positive
- LeetCode-First Missing Positive
- [leetcode] First Missing Positive
- [LeetCode] First Missing Positive
- LeetCode - First Missing Positive
- LeetCode | First Missing Positive
- Leetcode: First Missing Positive
- Leetcode:First Missing Positive
- php file
- 初学ML笔记N0.6——聚类方法
- STL-空间配置器剖析
- HDU1181
- SNMP协议
- leetcode:First Missing Positive
- bindService调用Service里面方法的步骤
- iText5 表格的生成
- 几种代码块的区别、执行顺序
- php file unlink
- (OK)(OK) [android-x86-6.0-rc1] compile_Android-x86_64_in_IBM-X3650-M4.txt
- 7.6 打印出以下杨辉三角形(要求打印10行)
- 2016-7-15 杂感
- OpenCV video process