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. 缺失的第一个正数的主要内容,如果未能解决你的问题,请参考以下文章