2020-04-25 18:39:55
問題描述:
給定乙個正整數陣列 a,如果 a 的某個子陣列中不同整數的個數恰好為 k,則稱 a 的這個連續、不一定獨立的子陣列為好子陣列。
(例如,[1,2,3,1,2] 中有 3 個不同的整數:1,2,以及 3。)
返回 a 中好子陣列的數目。
示例 1:
輸入: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].
示例 2:
輸入:a = [1,2,1,3,4], k = 3
輸出:3
解釋:恰好由 3 個不同整數組成的子陣列:[1,2,1,3], [2,1,3], [1,3,4].
1 <= a.length <= 20000
1 <= a[i] <= a.length
1 <= k <= a.length
問題求解:
直接去求解子區間有恰好k個不同的元素比較困難,如果替換為求解at most k的話就會容易很多。
時間複雜度:o(n)
public int subarrayswithkdistinct(int a, int k)private int helper(int nums, int k)
res += end - start + 1;
}return res;
}
相似題目:
1258. 漂亮子陣列
問題描述:
漂亮子陣列的定義是具有numodds
個奇數元素的任何長度的陣列。 給定乙個由整數組成的陣列nums
以及乙個整數numodds
,找出該陣列中所有的漂亮子陣列。 只要子陣列的開始索引以及結束索引不一樣,那麼這兩個子陣列就不一樣。返回漂亮子陣列的數量。
樣例
示例 1:
輸入:
nums = [1, 2, 3, 4, 5]
numodds = 2
輸出: 4
解釋: 有4個子陣列中含有兩個奇數,例如: [1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5].
示例 2:
輸入:nums = [2, 4, 6, 8]
numodds = 1
輸出: 0
解釋: 陣列中沒有奇數元素
注意事項
問題求解:
public int beautifulsubarrays(int nums, int numodds)private int helper(int nums, int k)
res += r - l + 1;
}return res;
}
1004. 最大連續1的個數 iii
問題描述:
給定乙個由若干 0 和 1 組成的陣列 a,我們最多可以將 k 個值從 0 變成 1 。
返回僅包含 1 的最長(連續)子陣列的長度。
示例 1:
輸入:a = [1,1,1,0,0,0,1,1,1,1,0], k = 2
輸出:6
解釋:
[1,1,1,0,0,1,1,1,1,1,1]
粗體數字從 0 翻轉到 1,最長的子陣列長度為 6。
示例 2:
輸入:a = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3
輸出:10
解釋:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗體數字從 0 翻轉到 1,最長的子陣列長度為 10。
1 <= a.length <= 20000
0 <= k <= a.length
a[i] 為 0 或 1
問題求解:
實際就是求最大的子陣列,其中at most k個0。
public int longestones(int a, int k)res = math.max(res, end - start + 1);
}return res;
}
Leetcode 992 K 個不同整數的子陣列
可以將問題簡化為求一次不同元素個數小於等於k和求一次不同元素個數小於等於k 1的子陣列的個數,然後再做差。求不同元素個數小於等於k的子陣列的個數可以用滑動視窗來實現。右端視窗每移動一次對答案的貢獻為right left 當前區間大小 class solution ans right left 對答案...
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個不同元素組成的字串 這樣可以有效的降低複雜度,使得單次區間尋找即可找到...