连号区间
虽然都都是暴力枚举,但第一次的思路最差,
第二次利用上了判断极差,不用排序但是放到一个函数中单独一层循环复杂度很高
第三次直接在枚举的时候找到max和min,复杂度O(n2)
C++ 代码
/*连号区间数 暴力枚举,超时*/
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e4+10;
int p[N];
/*
int t[N];
bool run(int l,int r)
{//过了4个数据,超时
memset(t,0,sizeof t);
for(int i=l;i<=r;i++)t[i]=p[i];
sort(t+l,t+r+1);
//bool tag=true;
for(int i=l;i<r;i++)
if(t[i+1]-t[i]!=1)
return false;
return true;
}
*/
/*
int runp(int l,int r){
//过了8个数据,超时
int max=p[l],min=p[r];
for(int i=l;i<=r;i++){
if(max<p[i])max=p[i];
if(min>p[i])min=p[i];
}
return max-min;
}
*/
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)cin>>p[i];
int res=0;
for(int i=1;i<=n;i++){
int _max=0,_min=1e4+10;
for(int j=i;j<=n;j++){
_max=max(p[j],_max);
_min=min(p[j],_min);
if(_max-_min==j-i)
res++;
}
}
cout<<res<<"\n";
return 0;
}