#include <bits/stdc++.h>
using
namespace
std;
int
cntSubarrays(
int
A[],
int
K,
int
n)
{
int
cntSub = 0;
map<
int
,
int
> mp;
int
l = 0, r = 0;
set<
int
> st;
while
(r < n) {
while
(r < n && st.size() <= K) {
if
(mp[A[r]]) {
st.insert(A[r]);
}
mp[A[r]]++;
r++;
if
(st.size() == K)
cntSub++;
}
while
(l < r && st.size() > K) {
cntSub++;
mp[A[l]]--;
if
(mp[A[l]] == 1) {
st.erase(st.find(A[l]));
}
l++;
}
}
while
(l < n && st.size() == K) {
cntSub++;
mp[A[l]]--;
if
(mp[A[l]] == 1) {
st.erase(st.find(A[l]));
}
l++;
}
return
cntSub;
}
int
main()
{
int
arr[] = { 1, 1, 1, 2, 2 };
int
K = 1;
int
N =
sizeof
(arr) /
sizeof
(arr[0]);
cout << cntSubarrays(arr, K, N);
return
0;
}
0 comments:
Post a Comment