LeetCode 41First Missing Positive
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.
这一题的思路是利用数组的下标,是数组的值应该等于下标加一,比如a[0]=1.a[1]=2,这样当你遍历的时候碰到a[i]!=i+1的时候,你就知道i+1不见了。
检查当前的a[i],如果a[i]!=i+1;就把a[i]放到它应该放的位置去,它应该处的位置是a[a[i]-1],比如a[i]=5,它应该处于a[4]的位置。然后再接着判断被换过来的数字是不是符合要求,是则下一个,不是则接着换。
class Solution { public: int firstMissingPositive(vector<int>& nums) { int len = nums.size(); int i = 0; while(i<len){ if(nums[i]!=i+1&& nums[i]>=1 && nums[i]<=len && nums[i]!=nums[nums[i]-1]){ //由于nums[i]-1作为下标,下标要大于等0小于len,所以nums[i]有个范围 int temp = nums[i]; nums[i] = nums[nums[i]-1]; nums[temp-1] = temp; } else{ i++; } } for(int i =0 ;i<len; i++){ if(nums[i]!=i+1){ return i+1; } } return len+1; } };