First Missing Positive
来源:互联网 发布:淘宝店铺活动怎么参加 编辑:程序博客网 时间:2024/06/01 08:13
First Missing Positive
Total Accepted: 5538 Total Submissions: 25376Given 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.
分析:
很直接的一个思路是:使用数组vis标记A中正数值的出现(vis[A[i]]=ture,A[i]>0),在A中没有出现的最小正数就是答案。但是题目对空间的要求使得根据A的大小动态建立vis变为不可能,因此只能利用已有的空间:数组A。A既是传入数据,也用作标记数组。选定标志flag,当A[i]>0 && A[i] - 1 >= 0 && A[i] - 1 < A.length时,用临时变量x先保存A[A[i]-1],再令A[A[i]-1]=flag,从而实现对A[i]做标记。对于x,执行相同的操作,直至x不满足x>0 && x - 1 >= 0 && x - 1 < A.length
Java Code:
public int firstMissingPositive(int[] A) {int i;final int flag = -1; //选定-1为标志for (i = 0; i < A.length; ++i) { //如果A中有flag,要先清除if (A[i] == flag) {A[i] = 0;}}//下面的for-loop负责扫描并标记正数for (i = 0; i < A.length; ++i) {int x = A[i], y = x;while (0 <= y - 1 && y - 1 < A.length && A[y - 1] != flag) {x = A[y - 1];A[y - 1] = flag;y = x;}}//下面的for-loop负责找出未出现的最小正数for (i = 0; i < A.length; ++i) {if (A[i] != flag) {break;}}return i + 1; }
0 0
- 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
- java中随机类 Random实现方法
- review
- [MDIT每天一小时]2014年Android系统就业前景浅析
- HDU 3518 Boring counting
- 在Eclipse中使用Maven构建Spring项目
- First Missing Positive
- DOM学习笔记
- hdu1018大数阶乘的位数,斯特林数的各种应用
- JAVA的动态代理
- Hadoop Pig学习笔记(一) 各种SQL在PIG中实现
- 第二层是指 软件,包括可用来搜集
- C/C++内存分配知识
- 测试
- 做出上述表述的高管是谷歌首席财务官