链接:https://leetcode.com/problems/first-missing-positive/description/
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0] Output: 3
Example 2:
Input: [3,4,-1,1] Output: 2
Example 3:
Input: [7,8,9,11,12] Output: 1
思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)。
下图以题目中给出的第二个例子为例,讲解操作过程。
class Solution { public: int firstMissingPositive(vector<int>& nums) { int i=0; int n=nums.size(); while(i<n) { if(nums[i]!=(i+1) && nums[i]>=1 && nums[i]<=n && nums[nums[i]-1]!=nums[i]) swap(nums[i],nums[nums[i]-1]); else i++; } for(i=0;i<n;i++) if(nums[i]!=(i+1)) return i+1; return n+1; } };