LeetCode--2962. 统计最大元素出现至少 K 次的子数组
给你一个整数数组
nums
和一个 正整数k
。请你统计有多少满足 「
nums
中的 最大 元素」至少出现k
次的子数组,并返回满足这一条件的子数组的数目。子数组是数组中的一个连续元素序列。
这里不能完全按照之前的1358. 包含所有三种字符的子字符串数目的思路来做,我们这里求的是数组最大值在其子数组中至少存在 k 个的子数组个数,换个思路,如果我们当前子数组已经有了 k 个目标值,那么此时它的左边界左移多少位就可以满足条件,换而言之,就是把右边界看作不变量,根据左边界和索引为 0 的差值进行计算,就是当前 [0, r] 中,右边界为 r 的符合条件的子数组的个数。
func countSubarrays(nums []int, k int) int64 {
maxNum := 0
for _, x := range nums {
maxNum = max(maxNum, x)
}
cnt := 0
ans := 0
l := 0
for _, x := range nums {
if x == maxNum {
cnt ++
}
for cnt == k {
if nums[l] == maxNum {
cnt --
}
l ++
}
ans += l
}
return int64(ans)
}
最后更新于