📅  最后修改于: 2023-12-03 14:50:25.903000             🧑  作者: Mango
给定一个长度为n的整数数组nums和一个整数k,计算nums中包含给定数字k正好出现m次的子数组的数量。
输入: nums = [1,2,1,2,3], k = 2, m = 2
输出: 2
解释: 包含给定数字2正好出现2次的子数组有[1,2,1,2], [2,1,2,3]。共计2个。
以下是用Python实现的代码片段,时间复杂度为O(n),空间复杂度为O(n)。
from collections import defaultdict
def count_subarrays(nums, k, m):
count = defaultdict(int)
ans = 0
count[0] = 1
count_k = 0
for num in nums:
if num == k:
count_k += 1
if count_k >= m:
ans += count[count_k - m]
count[count_k] += 1
return ans
本题解介绍了如何利用哈希表统计子数组中数字k出现的次数,同时计算符合条件的子数组数量。本算法时间复杂度为O(n),空间复杂度为O(n),能够有效地解决给定问题。