亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

<menuitem id="ffpmt"><kbd id="ffpmt"><video id="ffpmt"></video></kbd></menuitem>
    <samp id="ffpmt"><kbd id="ffpmt"></kbd></samp>
    為了賬號安全,請及時綁定郵箱和手機立即綁定
    已解決430363個問題,去搜搜看,總會有你想問的

    給定一個整數數組,找到最大子數組的長度,使得至少 1 個數字(來自前 k 個數字)不存在于其中

    給定一個整數數組,找到最大子數組的長度,使得至少 1 個數字(來自前 k 個數字)不存在于其中

    吃雞游戲 2023-05-09 15:09:05
    問題:給定一個整數數組,整數范圍從 1 到 k。不必所有 k 個整數都存在。例如。k = 3 and Array = [1,2,1,1,2]找到最大子數組的長度,使得從 1 到 k 中至少有一個整數不存在。示例:對于 k = 3 和數組 = [1,2,1,1,2],答案 = 5對于 k = 2 和數組 = [1,2,1,1,2],答案 = 2。我的代碼:def ans(A, n, k): #A is the array and n is the length    d = {}    if k > n:        return n    for i in range(n):        if A[i] in d:            d[A[i]].append(i)        else:            d[A[i]] = [i]    max_diff = 0    if len(d) != k:        return n    for j in d:        r = len(d[j])        if r == 1:            diff = max(n-d[j][-1]-1, d[j][0])        else:            diff = max(d[j][0], r - d[j][-1]-1)            for i in range(r-1):                diff = max(diff, d[j][i+1] - d[j][i]-1)        max_diff = max(max_diff, diff)    return max_diff但是,代碼給出運行時錯誤和一些隱藏的測試用例的錯誤答案??赡艿腻e誤是什么?以及給出錯誤答案的可能測試用例?diff 的解釋:基本上對于數組中的每個數字,它正在尋找延伸,即不存在該特定元素的間隔長度。對于第二個示例,d 變為 {1:[0,2,3], 2:[1,4]}。在二的情況下,在索引 0 上存在一個沒有二的子數組,即長度 = 1,因此 diff 將為 1。那么在從索引 2 到 3(含)的子數組中沒有二。因此,差異 = 2。編輯:考慮到評論,我對代碼做了一些更改,它不再給出運行時錯誤,但我仍然對一些隱藏的測試用例有錯誤的答案。如果您想嘗試問題鏈接:https://www.codechef.com/LRNDSA02/problems/NOTALLFL
    查看完整描述

    2 回答

    ?
    阿波羅的戰車

    TA貢獻1862條經驗 獲得超6個贊

    該代碼給出了輸入的錯誤答案:

    k = 2
    array = [1, 2, 2, 1, 2, 2, 2, 2, 2]

    更改應該在第 18 行,即而不是

     diff = max(d[j][0], r - d[j][-1]-1)

    它應該是

     diff = max(d[j][0], n - d[j][-1]-1)

    這是一個小錯誤,但導致很多測試用例失敗。


    查看完整回答
    反對 回復 2023-05-09
    ?
    HUWWW

    TA貢獻1874條經驗 獲得超12個贊

    考慮以下:

    目標 = @,所有其他數字 = -。

    A = { - - - @ - @ @ - - - - - - @ - @ - - - - - - - - - - - }

    如果我們想找到不包含@的子數組,我們可以將整個數組視為被@包圍,這樣:

    A` = { @ - - - @ - @ @ - - - - - - @ - @ - - - - - - - - - - - @ }

    然后,這只是一個問題 - 跟蹤最后遇到的@的位置,以及連續兩次出現的@之間的最大差異。@ 可以是 1..k 之間的任何數字,因此可以通過大小為“k”的數組來跟蹤它。

    C++ 代碼類似于(請測試 off-by-1 錯誤,因為我希望它在那里:

    int subarr(int* A, size_t n, int k)

    {

       if (n < k)

       {

          return n;

       }


       size_t max = 0;

       std::vector<size_t> lastPos(k);

       for (size_t i = 0; i < lastPos.size(); i++)

       {

          lastPos[i] = -1;

       }


       // Find the longest subArray when excluding a single digit of the digits present.

       for (size_t i = 0; i < n; i++)

       {

         if ((i - lastPos[A[i]]) > max)

         {

            max = i - lastPos[A[i]];

         }

         lastPos[A[i]] = i;

       }


       // Check for last

       for (size_t i = 0; i < lastPos.size(); i++)

       {

         if ((i - lastPos[A[i]]) == -1)

         {

            return n;

         }

       }


       return max - 1;

    }


    查看完整回答
    反對 回復 2023-05-09
    • 2 回答
    • 0 關注
    • 128 瀏覽
    慕課專欄
    更多

    添加回答

    舉報

    0/150
    提交
    取消
    微信客服

    購課補貼
    聯系客服咨詢優惠詳情

    幫助反饋 APP下載

    慕課網APP
    您的移動學習伙伴

    公眾號

    掃描二維碼
    關注慕課網微信公眾號