#include<iostream>
#include<deque>
#include<vector>
using namespace std;
int main()
{
int n;//数组长度
int num;//校准值;
cin>>n;
cin>>num;
int res=0;
vector<int> arr(n);
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
if(arr.size()==0||num<0)
{
return res;
}
//维护一个最大最小值的结构
deque<int> max_num;
deque<int> min_num;
int i=0;
int j=0;
//滑动窗口
while(i<n)//固定一个值,求以他为第一个元素的
{
while(j<n)
{
//因为有break 的原因,看看j值有没有更新,如果更新了在放值。没更新的情况下直接判断arr[i+1,...j]的情况即可;
if(min_num.empty()||min_num.back()!=j)
{
while(!max_num.empty()&&arr[j]>=arr[max_num.back()])
{
// int popmax = max_num.back();
max_num.pop_back();
}
最大值减去最小值小于或等于num的子数组数量C++版
最新推荐文章于 2023-08-23 11:31:17 发布