码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode First Missing Positive

时间:2015-10-15 06:19:25      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

原题链接在这里:https://leetcode.com/problems/first-missing-positive/

两遍扫描,第一遍时swap A[i] 和它 对应的位置元素A[A[i]-1].

第二遍时找是否有 A[i] != i+1的,若有就返回i+1, 若没有,就返回A.length+1.

Note: 第一遍扫描时 swap 的条件是 A[i] 大于0并且小于等于 A.length, 如此A[i]-1才有对应的位置;并且排除掉A[i] == A[A[i]-1]情况,即两点已经相同,不需要swap, 否则陷入infinite.

做这类swap时注意对调是否相同,是否会造成infinite loop. 

i--是保证swap后 i 返回原位。

AC Java:

 1 public class Solution {
 2     public int firstMissingPositive(int[] A) {
 3         if(A == null || A.length == 0){
 4             return 1;
 5         }
 6         //First Iteration, swap A[i] to its corresponding position A[A[i]-1]
 7         for(int i = 0; i<A.length; i++){
 8             if(A[i]>0 && A[i]<=A.length && A[i]!=A[A[i]-1]){
 9                 swap(A, i, A[i]-1);
10                 i--;
11             }
12         }
13         //Second Iteration, return i+1 if A[i] != i+1
14         for(int i = 0; i<A.length; i++){
15             if(A[i] != i+1){
16                 return i+1;
17             }
18         }
19         //All correspond, return A.length+1
20         return A.length + 1;
21     }
22     public void swap(int [] A, int i, int j){
23         int temp = A[i];
24         A[i] = A[j];
25         A[j] = temp;
26     }
27 }

 

LeetCode First Missing Positive

标签:

原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4881242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!