题目:
1210. 连号区间数 - AcWing题库
思路:枚举
枚举一般是先暴力再优化。
注意:对于区间的枚举,一般是定一移一。固定任何一端移动另外一端均可以。但是此题为便于在枚举移动端的过程中确定最大最小,选择定左移右。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int N=10010;
int a[N];
int main()
{
int n,res=0;
cin>>n;
int i,j;
for(i=1;i<=n;i++)scanf("%d",&a[i]);
//固定区间左端点
for(i=1;i<=n;i++)
{
int max=0;int min=10001;
//移动的右端点
for(j=i;j<=n;j++)
{
if(max<a[j])max=a[j];
if(min>a[j])min=a[j];
//因为排列是不重复的,若连续递增则有区间端点差=最大-最小
if(max-min==j-i)res++;
}
}
cout<<res;
}