原題如下:
丟失的第一個正整數
給出一個無序的正數數組,找出其中沒有出現的最小正整數。
如果給出 [1,2,0]
, return 3
如果給出 [3,4,-1,1]
, return 2
1、這題並不難,主要是要考慮到多種不同的情況,題目給出的數組應該是可以有重複數字並且有正有負的;
2、最小的正整數,將數組中的數放入一個與輸入數組等大的數組中,排序,如果最小的數是小於等於1的,最小正整數應該在數組中間或者大於數組最大的數,這時候只要考慮每一個數和前一個數相差的是不是大於1即可,注意,還要保證前一個數是大於0的;
3、如果最小的數大於1,那麼結果就爲1.
具體的C++代碼如下:
class Solution {
public:
/*
* @param A: An array of integers
* @return: An integer
*/
int firstMissingPositive(vector<int> &A) {
// write your code here
// write your code here
if (A.size() == 0)
return 1;
if (A.size() == 1)
{
if (A[0] <= 0)
return 1;
else
{
return A[0] + 1;
}
}
int len = A.size();
sort(A.begin(), A.end());
int max = A[len - 1];
vector<int> m(len,0);
for (int i = 0; i < len;i++)
{
m[i] = A[i];
}
if (m[0] <= 1)
{
for (int i = 1; i < len; i++)
{
if ((m[i] - m[i - 1] >1) && m[i - 1]>0)
{
return m[i - 1] + 1;
}
}
return m[len - 1] + 1;
}
else
{
return 1;
}
}
};