- [Leetcode 2962. Count Subarrays Where Max Element Appears at Least K Times](#Leetcode 2962. Count Subarrays Where Max Element Appears at Least K Times)
- [1. 解题思路](#1. 解题思路)
- [2. 代码实现](#2. 代码实现)
1. 解题思路
这一题思路上同样很直接,就是找到最大的元素所在的全部的位置坐标,然后分别考虑取 i i i到 i + k i+k i+k个最大元素时substring左右可以选择的起止点位置数目,相乘累加即可。
2. 代码实现
给出python代码实现如下:
python
class Solution:
def countSubarrays(self, nums: List[int], k: int) -> int:
_max = max(nums)
n = len(nums)
flags = []
for i, x in enumerate(nums):
if x == _max:
flags.append(i)
m = len(flags)
if m < k:
return 0
ans = 0
flags.insert(0, -1)
for i in range(m-k+1):
ans += (flags[i+1]-flags[i]) * (n-flags[i+k])
return ans
提交代码评测得到:耗时1040ms,占用内存30.7MB。