[Leetcode] first missing positve 缺失的第一个正数

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

For example,
Given[1,2,0]return3,
and[3,4,-1,1]return2.

Your algorithm should run in O(n) time and uses constant space.

题意:给定连续的数列,找出一个缺失的正数

思路:开始理解错了题意,没有想到题中隐藏正数从1开始这么大一个信息量(不知道,我现在理解错了没)。首先想到的是用unordered_set,这样从1开始(若1不存在,就直接找到了),不断寻找值加1是否存在,从而找到缺失的正数。必须用到常数空间,恩,换个思路。遍历数组,我们将值为A[i]放在对应的位置(A[A[i]-1]),这样就按照从小到大的顺序将数组排好序了,然后再次遍历数组,找到 i+1不等于A[i]的点。值得注意的是通过交换将A[i] 放在A[A[i]-1]以后,遍历再次启动点应该是 i ,因为,新的A[i] 值是否满足A[i] =i+1还未可知。若是A[i] =i+1或是A[i]<=0只直接跳过。代码如下:

 1 class Solution {
 2 public:
 3     int firstMissingPositive(int A[], int n) 
 4     {
 5         int i=0;
 6         while(i<n)
 7         {
 8             if(A[i] !=i+1 &&A[i]>0&&A[i]<=n&&A[A[i]-1] !=A[i])
 9                 swap(A[i],A[A[i]-1]);
10             else 
11                 ++i;
12         }  
13         for(i=0;i<n;++i)
14         {
15             if(A[i] !=i+1)
16                 break;
17         }  
18         return i+1;    
19     }
20 };
原文地址:https://www.cnblogs.com/love-yh/p/7107564.html