41. 缺失的第一个正数

Posted 朴素贝叶斯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了41. 缺失的第一个正数相关的知识,希望对你有一定的参考价值。

题目描述:

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.

思路:

以原数组原地作为一个哈希表,把元素放到它该放到的位置上,这里数组下标可以携带信息,数组元素要注意保存合理的值。

代码:

 1 class Solution {
 2 public:
 3     int firstMissingPositive(vector<int>& nums)
 4     {
 5         int n = nums.size();
 6         if(n == 0)
 7             return 1;  
 8         int i = 0;
 9         while(i < n)//循环目的:把数组元素中范围在1-n之间的整数放在正确的位置上
10         {
11             if(nums[i] <= 0)
12                 i++;
13             else
14             {   //如果是正数,并且还没有没有放在正确的位置上
15                 if(nums[i]<=n && nums[i]!=i+1 && nums[nums[i]-1]!=nums[i])
16                 {
17                     swap(nums[i], nums[nums[i]-1]);//有可能把当前位置后边需要判断的数交换到这里,所以
18                 }                        //i不能递增
19                 else
20                     i++;                
21             }
22         } 
23         for(int i = 0; i < n; i++)
24         {
25             if(nums[i] != i+1)
26             {
27                 return i+1;
28             }
29         }
30         return n+1;
31     }
32 };

 

以上是关于41. 缺失的第一个正数的主要内容,如果未能解决你的问题,请参考以下文章

41. 缺失的第一个正数

41. 缺失的第一个正数

41. 缺失的第一个正数(On)

LeetCode:缺失的第一个正数41

41. 缺失的第一个正数

[LeetCode 41.] 缺失的第一个正数