题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个数组和一个整数 K,找出其中所有数组最大值出现次数不少于 K 的子数组的数目。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public:
long long countSubarrays(vector<int>& nums, int k) {
/*int max_count = 0;
int max_num = 0;
for (const int &i : nums) {
if (i > max_num) {
max_num = i;
max_count = 1;
}
else if (i == max_num) {
max_count++;
}
}
if (max_count < k) return 0;*/
int max_num = ranges::max(nums);

long long ans = 0;
int left = 0;
int max_rec = 0;
for (int right = 0; right < nums.size(); right++) {
if (nums[right]==max_num) {
max_rec++;
}
while(max_rec == k) {
if (nums[left++]==max_num) {
max_rec--;
}
}
ans += left;
}
return ans;
}
};