Count pairs formed by distinct element sub-arrays - GeeksforGeeks
Given an array, count number of pairs that can be formed from all possible contiguous sub-arrays containing distinct numbers. The array contains positive numbers between 0 to n-1 where n is the size of the array.
Read full article from Count pairs formed by distinct element sub-arrays - GeeksforGeeks
Given an array, count number of pairs that can be formed from all possible contiguous sub-arrays containing distinct numbers. The array contains positive numbers between 0 to n-1 where n is the size of the array.
int
countPairs(
int
arr[],
int
n)
{
// initialize number of pairs to zero
int
count = 0;
//Left and right indexes of current window
int
right = 0, left = 0;
// Boolean array visited to mark elements in
// current window. Initialized as false
vector<
bool
> visited(n,
false
);
// While right boundary of current window
// doesn't cross right end
while
(right < n)
{
// If current window contains all distinct
// elements, widen the window toward right
while
(right < n && !visited[arr[right]])
{
count += (right - left);
visited[arr[right]] =
true
;
right++;
}
// If duplicate is found in current window,
// then reduce the window from left
while
(left < right && (right != n &&
visited[arr[right]]))
{
visited[arr[left]] =
false
;
left++;
}
}
return
count;
}