PAT_甲級_1144 The Missing Number

題目大意:

給定一個長度爲N的序列,須要輸出該序列中最小的沒有出現的正整數算法

算法思路:

使用map記錄全部輸入的正數,而後從1開始一直向後查找map中沒有出現的正數,而後輸出退出循環便可。數組

注意點:

  • 一、若是是使用hash數組來記錄每個出現的正數的話,容易在最後一個測試點出現段錯誤。
  • 二、雖然題目說輸入的數字在int範圍內,可是若是沒有出現缺乏的狀況下,最大的正數就是N ,由於若是有缺失必定在N之內的數字,而且後面就算出現比N大的數字也沒有必要求解了。(該條件不考慮直接死循環能夠)

提交結果:

image.png

AC代碼:

#include<cstdio>
#include<unordered_map>

using namespace std;

unordered_map<int,bool> a;

int main(){
    int N;
    scanf("%d",&N);
    for(int i=0;i<N;++i){
        int b;
        scanf("%d",&b);
        if(b>=0){
            a[b] = 1;// 標記全部輸入的正數爲1 
        }
    }
    for(int i=1;;++i){
        if(a[i]==0){
            printf("%d",i);
            break;
        }
    }
    return 0;
}
相關文章
相關標籤/搜索