题目链接:LeetCode First Missing Positive
解题思路:
可以通过限制数字的范围和位置来解决——把 i+1 放在第 i 个位置,遍历数组之后就可以再进行一次遍历即可得到最小的missing number
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size(), ans = n+1;
for(int i=0;i<n;)
{
if(nums[i] > 0 && nums[i] <= n && nums[i] != i+1 && nums[nums[i]-1] != nums[i])
swap(nums[i], nums[nums[i]-1]);
else i++;
}
for(int i=0;i<n;i++)
if(nums[i] != i+1)
{
ans = i+1;
break;
}
return ans;
}
};
总结:
找到一个不错的OJ,与一般的ACMOJ不一样,是面试OJ。