问题描述
小U拿到了一组排列,她想知道有多少个子区间满足区间内部的数构成一个排列。一个区间的排列是指:该区间的数包含从 11 到 kk 的每个数,并且每个数恰好出现一次,这个区间的长度为 kk。
例如,对于数组 [2, 1, 5, 3, 4],其中区间 [2, 2],[1,2] 和 [1, 5] 都是排列。
测试样例
样例1:
输入:
n = 5 ,a = [2, 1, 5, 3, 4]
输出:3
样例2:
输入:
n = 5 ,a = [1, 2, 3, 4, 5]
输出:5
样例3:
输入:
n = 4 ,a = [4, 3, 2, 1]
输出:4
#include <algorithm>
#include <iostream>
#include <unordered_set>
#include <vector>
using namespace std;
int solution(int n, vector<int> &a) {
int count = 0;
for (int i = 0; i < n; ++i) {
int max_val = 0;
unordered_set<int> seen;
for (int j = i; j < n; ++j) {
int num = a[j];
max_val = max(max_val, num);
seen.insert(num);
int k = j - i + 1;
if (max_val == k && seen.size() == k) {
count++;
}
}
}
return count;
}
int main() {
vector<int> v1 = {2, 1, 5, 3, 4};
vector<int> v2 = {1, 2, 3, 4, 5};
vector<int> v3 = {4, 3, 2, 1};
cout << (solution(5, v1) == 3) << endl;
cout << (solution(5, v2) == 5) << endl;
cout << (solution(4, v3) == 4) << endl;
return 0;
}