leetcode-统计最大元素出现至少 K 次的子数组
https://leetcode.cn/problems/count-subarrays-where-max-element-appears-at-least-k-times/description/
给你一个整数数组 nums 和一个 正整数 k 。
请你统计有多少满足「nums 中的最大元素」至少出现 k 次的子数组,并返回满足这一条件的子数组的数目。
子数组是数组中的一个连续元素序列。
示例 1:
输入:nums = [1,3,2,3,3], k = 2
输出:6
解释:包含元素 3 至少 2 次的子数组为:[1,3,2,3]、[1,3,2,3,3]、[3,2,3]、[3,2,3,3]、[2,3,3] 和 [3,3] 。
示例 2:
输入:nums = [1,4,2,1], k = 3
输出:0
解释:没有子数组包含元素 4 至少 3 次。
提示:
class Solution {
public:
long long countSubarrays(vector<int>& nums, int k) {
int n=nums.size();
int ma=0;
for(int i=0;i<n;i++){
ma=max(ma,nums[i]);
}
vector<int> t;
for(int i=0;i<n;i++){
if(nums[i]==ma){
t.push_back(i+1);
}
}
if(t.size()<k){
return 0;
}
long long ans=0;
ans+=(t[0]-1ll)*(n-t[k-1]+1);
ans+=(n-t[k-1]+1);
cout<<ans<<endl;
int m=t.size();
for(int i=1;i<m;i++){
if((i+k-1)>=m){
break;
}
ans+=1ll*(t[i]-t[i-1])*1ll*(n-t[i+k-1]+1);
}
return ans;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2020-12-13 线段树维护区间最大值和最小值
2020-12-13 位运算&1