原题地址:https://leetcode-cn.com/problems/first-missing-positive/description/
题目描述:
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
解题方案:
分为两种情况,如果没有正整数的话就是缺失1,否则找到最小的正整数,然后从1按序比较,找到没有对应上的数。没有注意的地方是有重复数字出现的情况。以及有一个问题,是不是空的向量不能排序?
代码:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if(nums.size() == 0)
return 1;
sort(nums.begin(), nums.end());
int k = nums.size() - 1;
if(nums[k] <= 0)
return 1;
else
{
int i = 0;
while(nums[i] <= 0)
i ++;//i是第一个正数
int target = 1;
int j = i;
while(j <= k)
{
if(nums[j] == target)
{
while(nums[j + 1] == nums[j] && j != nums.size() - 1)
j ++;
j ++;
target ++;
}
else
{
break;
}
}
if(j == k + 1)
target = nums[k] + 1;
return target;
}
}
};