可以將問題簡化為求一次不同元素個數小於等於k和求一次不同元素個數小於等於k-1的子陣列的個數,然後再做差。
求不同元素個數小於等於k的子陣列的個數可以用滑動視窗來實現。
右端視窗每移動一次對答案的貢獻為right-left(當前區間大小)
class
solution
ans+
=right-left;
//對答案的貢獻,相當於[right-1,right]
//[right-2,right],[right-3,right]----[left,right]
}return ans;
}int
subarrayswithkdistinct
(vector<
int>
& a,
int k)
};
LeetCode 992 K 個不同整數的子陣列
題目鏈結 給定乙個正整數陣列 a,如果 a 的某個子陣列中不同整數的個數恰好為 k,則稱 a 的這個連續 不一定不同的子陣列為好子陣列。例如,1,2,3,1,2 中有 3 個不同的整數 1,2,以及 3 返回 a 中好子陣列的數目。輸入 a 1,2,1,2,3 k 2 輸出 7 解釋 恰好由 2 個...
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,...