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

41. 缺失的第一个正数

时间:2019-10-31 16:35:06      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:constant   递增   return   循环   iss   交换   swa   之间   ++   

题目描述:

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. 缺失的第一个正数

标签:constant   递增   return   循环   iss   交换   swa   之间   ++   

原文地址:https://www.cnblogs.com/zjuhaohaoxuexi/p/11771603.html

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