Given an unsorted integer array, find the first missing positive integer.
例如:给序列[1,2,0],
第三个位置上不是正数,那缺失的正数就是 3
,
给序列 [3,4,-1,1],先把正数放在对应的位置上之后。变成了[1,-1,3,4],第二个位置上不是2,而是-1,所以缺失的正数是2,即返回
2
.
解决方法:
把所有正数都放在自己正确的对应的位置上,然后再找出第一个对应元素不是正数的下标,那么这一下标就是First Missing Positive。
代码:
int firstMissingPositive(vector<int>& nums) { int i = 0; int n = nums.size(); while (i < n) //把每个数放在正确下表的位置。比如数3在第一个位置,就把它与第三个位置的元素置换,那么3就能放在第三个位置了, { 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; }