周赛积累
文章目录
2023.1.15 力扣周赛
中档题
2537. 统计好子数组的数目
思路:滑动窗口
时间复杂度:O(n)
class Solution:
def countGood(self, nums: List[int], k: int) -> int:
n = len(nums)
l = 0
record = defaultdict(int)
cnt = 0 #控制窗口
ans = 0
for r in range(n):
if record[nums[r]]: cnt += record[nums[r]] #如果右窗口的值出现过,那它就满足record[nums[r]]对儿
record[nums[r]] += 1
while l < r and cnt >= k:
ans += n - r #此时[l:r], 窗口右边界延伸也会满足条件
record[nums[l]] -= 1
cnt -= record[nums[l]] #窗口左移的话就会少了record[nums[l]]对儿
l += 1
return ans