区间连续问题的另类求解

题目链接

思路:

在某一段区间是否连续可以求出区间的最大最小值,让他们相减,再与区间端点相减,如果他们的值相等的话,那该区间就是一段连续的区间。当然,他也是有局限性的的,如果区间有重复元素的话,该方法就不在适用了。要具体问题具体分析。

本题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;
}

 

posted @ 2022-11-02 21:15  Luli&  阅读(17)  评论(0编辑  收藏  举报