2011: Mex Query

2011: Mex Query

描述

題目描述:

Give nn non-negative integers, please find the least non-negative integer that doesn’t occur in the nn numbers.

輸入:

The first line is an integer TT, representing the number of test cases.

For each test case:

The first line of each test case is an integer nn.

The second line of each test case are nn non-negative integers a\_iai.

T \leq 10T10

n \leq 2 \times 10^5n2×105

0 \leq a\_i < 2^{31}0ai<231

輸出:

or each test case, output a line with the answer.

樣例輸入
2
4
4 0 1 3
2
1 1
樣例輸出
2
0

該題是河北省第二屆省賽第二題的加強版,樣例比省賽原題多了一個,原題只有一個測試用例,當時做原題的時候那個樣例爲4\n 4 0 1 1,我當時理解出了問題least理解成了區間中最少沒有出現的個數,正好樣例區分不出來,就進了區間坑裏,後來反應出來是最少的時候,腦子裏已經沒有上限的概念了。。如輸入3\n 0 1 2時不知道該輸出什麼了。當時因爲在區間中深陷,知道兩個端點值,所以沒有用到排序,直接用的標記法。比賽肯定是要設置一些陷阱的吧

重現賽做的時候用排序法第一次提交時是66.66%,在測試一些數據後發現該算法在不去重的情況下顯示的結果不正確,從而有引入了一個最大數據邊界的標記數組進行輔助優化,然後就可以通過了。理解正確題意真的很重要,否則無論怎樣修改提交答案總是錯誤的。這也讓我反思了我的慣性思維,因爲以前做過一道類似的題就沒有弄清楚題意,有時候腦海中認爲是正確的東西容易根深蒂固,其實可能一開始就是錯誤的。

#include<bits/stdc++.h>
using namespace std;
int a[200001];
int main()
{
    int T,n,k,i,N;
    int flag;
    cin>>T;

    while(T--)                                      //第一次通過了66.66%,處理上界情況的時候n-1寫成了i-1
    {
        N=0;

        cin>>n;                                     //0 1 1 4 2 5有重複數字的時候沒有解決   0 4 1 1 2
        int F[n];
        memset(F,-1,sizeof(F));
        memset(a,-1,sizeof(a));
        flag=0;


        for(i=0;i<n;i++)
        {
            cin>>k;
            F[i]=k;
        }

        sort(F,F+n);

        //去重
        a[N++]=F[0];
         for(i=1;i<n;i++)
        {
            if(F[i]!=F[i-1])
            {
                a[N++]=F[i];
            }
        }



       for(i=0;i<N;i++)
        {
            if(a[i]!=i)
            {
                printf("%d\n",i);
                flag=1;
                break;
            }
        }


        if(flag==0)
        printf("%d\n",a[N-1]+1);



    }

}

運行結果
通過率
通過的數據:
結果耗時內存
通過03993600
通過04059136
通過04927488

而且memset()與sort結合的方法並沒有超時

不能因爲一次次的失敗挫折就失去信心,如果自己都認爲自己輸了,那麼自己纔是真的輸掉了


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