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.
int firstMissingPositive(vector<int>& nums) { int n = nums.size(), t, i; for(i = 0; i < n; i++) { t = nums[i]; while(t > 0 && t < n && nums[t-1] != t) { swap(nums[i], nums[t-1]); t = nums[i]; } } for(i = 0; i < n; i++) { if(nums[i] != i+1) return i+1; } return n+1; }
Idea:
*
* We can move the num to the place whcih the index is the num.
*
* for example, (considering the array is zero-based.
* 1 => A[0], 2 => A[1], 3=>A[2]
*
* Then, we can go through the array check the i+1 == A[i], if not ,just return i+1;
时间: 2024-10-24 16:23:35