lintcode刷題——丟失的第一個正整數

原題如下:

丟失的第一個正整數 

給出一個無序的正數數組,找出其中沒有出現的最小正整數。

樣例

如果給出 [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;
}


    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章