LeetCode: First Missing Positive

Given an unsorted integer array, find the first missing positive integer.

本想用求和的方法解决,但是因为有重复的数,所以这么解决不了。

看了网上的解法,是排序。当时我以为排序肯定是O(nlogn)啊,所以没想到怎么解决。

但是这里忽略了一个条件,我们需要排序的数据是从1开始的连续的数。

所以可以这样排序。把每个元素放到对应的位置上。1就放到A[0], 2就放到A[1]....

只要这样排好序,再找到第一个位置与数不对应的就是missing positive。

这里要注意,对什么样的数据进行交换排序是有条件的。1. 它应该是一个正数 2. 它不能超过数组的范围。e.g.[1, 3]  

3. 它不在自己应该在的位置上。4.它的位置上的元素不正确。如果它的位置上的元素正确,说明它是一个重复元素。

 1 public int firstMissingPositive(int[] A) {
 2         for (int i=0; i<A.length; i++) {
 3             if (A[i] > 0 && A[i] <= A.length) {
 4                 if (A[i] != i+1 && A[A[i] - 1] != A[i]) {
 5                     int t = A[A[i] - 1];
 6                     A[A[i] - 1] = A[i];
 7                     A[i] = t;
 8                     i--;
 9                 }
10             }
11         }
12         
13         for (int i=0; i<A.length; i++) {
14             if (A[i] != i+1) {
15                 return i+1;
16             }
17         }
18         
19         return A.length+1;
20     }

 

posted on 2014-03-17 04:54  longhorn  阅读(178)  评论(0编辑  收藏  举报

导航