LeetCode OJ算法题(四十):First Missing Positive
来源:互联网 发布:js获取当前页面的url 编辑:程序博客网 时间:2024/05/17 00:10
题目:
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.
解法:这题要求查找数组中缺少的最小正整数,而且只能在线性时间内和常数空间内完成,所以不能用HashSet!
参考别人的解决思路,第一遍遍历数组,使得下标为i的数组元素的值为i+1,或者说让数组中的所有正整数k,都在下标为k-1的位置!第二遍只要检查第一个出现A[k-1]!=k的k就可以了。
那么问题就是怎么让正整数k放在A[k-1]中:
首先我们遍历数组,如果数组元素A[i]大于0,那么我们需要将它放在A[A[i]-1],当然还需要检查
1、是否需要移动;如果A[i]已经等于i+1或者A[A[i]-1]已经等于A[i],则不需要交换
2、下表是否越界。如果A[i]-1大于数组最大下标,也不需要移动。
public class No40_FirstMissingPositive {public static void main(String[] args){System.out.println(firstMissingPositive(new int[]{4,6,3,-1,1}));}public static int firstMissingPositive(int[] A) { int i = 0; while(i<A.length){ if(A[i]!=i+1 && A[i]>0 && A[i]-1<A.length && A[A[i]-1]!=A[i]){ swap(A, i, A[i]-1); } else i++; } i = 0; while(i<A.length && A[i]==i+1) i++; return i+1; }public static void swap(int[] A, int i, int j){A[i] += A[j];A[j] = A[i] - A[j];A[i] = A[i] - A[j];}}
0 0
- LeetCode OJ算法题(四十):First Missing Positive
- LeetCode OJ:First Missing Positive
- LeetCode OJ - First Missing Positive
- LeetCode OJ First Missing Positive
- 【LeetCode OJ 41】First Missing Positive
- LeetCode OJ-41-First Missing Positive
- [LeetCode]First Missing Positive(!!!)
- 【LeetCode算法练习(C++)】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
- 在敏捷测试中如何设计用例
- Xenu介绍
- 内存管理知识
- 我谈Web程序难测试
- 大家来找茬:谁降低了游戏研发的品质
- LeetCode OJ算法题(四十):First Missing Positive
- 也谈测试的核心技术
- 浅谈cs与bs的结构测试
- ISTQB,QAI,软件评测师软件测试认证特点对比
- 方便的实体机与虚拟机之间传送文件的方法
- 应该知道的自动化测试陷阱1
- 为什么年事已高的我还在编程?
- 应该知道的自动化测试陷阱2
- 韩寒的经典格言有哪些?