区间连续问题的另类求解
题目链接
思路:
在某一段区间是否连续可以求出区间的最大最小值,让他们相减,再与区间端点相减,如果他们的值相等的话,那该区间就是一段连续的区间。当然,他也是有局限性的的,如果区间有重复元素的话,该方法就不在适用了。要具体问题具体分析。
本题AC代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e4 + 10;
int n, m, t;
int a[N];
signed main() {
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
int res = 0;
for (int i = 1; i <= n; i ++ ) {
int mx = a[i], mn = a[i]; //统计区间的最值
for (int j = i; j <= n; j ++ ) {
mx = max(mx, a[j]);
mn = min(mn, a[j]);
if (mx - mn == j - i) res ++ ; //判断区间最值与区间长度是否相等,注意该题没有重复的元素出现
}
}
cout << res << endl;
return 0;
}
没有什么能阻止我对知识的追求!!!