LeetCode 992 K 個不同整數的子陣列

2021-10-19 23:27:21 字數 891 閱讀 3567

題目鏈結

給定乙個正整數陣列 a,如果 a 的某個子陣列中不同整數的個數恰好為 k,則稱 a 的這個連續、不一定不同的子陣列為好子陣列。

(例如,[1,2,3,1,2] 中有 3 個不同的整數:1,2,以及 3)

返回 a 中好子陣列的數目。

輸入:a =

[1,2,1,2,3], k = 2

輸出:7

解釋:恰好由 2 個不同整數組成的子陣列:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2].

輸入:a =

[1,2,1,3,4], k = 3

輸出:3

解釋:恰好由 3 個不同整數組成的子陣列:[1,2,1,3], [2,1,3], [1,3,4].

思維+雙指標~

利用雙指標,當我們固定左端點時,可以找到恰好存在 k 個不同整數的最大右邊界 r

rr,那麼我們只需找到最小左邊界 l

ll,答案就是 r−l

+1

r-l+1

r−l+

1,那麼這個最小左邊界怎麼找呢,我們可以再加乙個指標,這個指標指向恰好存在 k-1 個不同整數的最大右邊界 r′r'

r′,答案就是 r−r

′r-r'

r−r′

,ac**如下:

class

solution

while

(sum2 > k -1)

ans +

= l2 - l1;

r++;}

return ans;}}

;

Leetcode 992 K 個不同整數的子陣列

可以將問題簡化為求一次不同元素個數小於等於k和求一次不同元素個數小於等於k 1的子陣列的個數,然後再做差。求不同元素個數小於等於k的子陣列的個數可以用滑動視窗來實現。右端視窗每移動一次對答案的貢獻為right left 當前區間大小 class solution ans right left 對答案...

LeetCode 992 K 個不同整數的子陣列

困難題,先想著dp掃瞄,但是會爆棧 主體思想仍然採用滑動視窗來進行 但是對於該題目,有乙個比較新的點,要利用腦經急轉彎思想把問題轉換一下 對於正好為k個不同元素組成的最長字串可以轉換為 最多由k個不同元素組成的字串 最多由k 1個不同元素組成的字串 這樣可以有效的降低複雜度,使得單次區間尋找即可找到...

滑動視窗 992 K 個不同整數的子陣列

2020 04 25 18 39 55 問題描述 給定乙個正整數陣列 a,如果 a 的某個子陣列中不同整數的個數恰好為 k,則稱 a 的這個連續 不一定獨立的子陣列為好子陣列。例如,1,2,3,1,2 中有 3 個不同的整數 1,2,以及 3。返回 a 中好子陣列的數目。示例 1 輸入 a 1,2,...