Back to Leetcode

Readme

Two_Pointers/2516.Take-K-of-Each-Character-From-Left-and-Right/Readme.md

latest972 B
Original Source

2516.Take-K-of-Each-Character-From-Left-and-Right

解法1:二分搜值

从题意转换一下,我们可以知道,题目需要找中间一段符合条件的最长滑窗,使得里面a、b、c的个数分别不能多于各自的阈值A,B,C。我们可以二分猜值,假设滑窗长度是k,在数组上找一遍是否凑存在某个长度固定为k的滑窗满足上述关系。如果有的话,那么继续增大滑窗长度,否则就减小滑窗长度。

解法2:滑窗

如果我们固定左端点i,那么可以找到最远的右端点j使得满足滑窗里面a、b、c的个数分别不能多于各自的阈值A,B,C。此时我们再右移左端点i一步,abc可能会减少某个元素从而不再逼近阈值,这样右端点就有可能继续松弛往右前进,找到以新左端点对应的最长滑窗。以此类推,我们可以找到每个位置作为左端点的最长滑窗。最终答案就是n减去最大滑窗长度。