给我们一个整数数组arr []。另外,还有两个数字A和B。目标是对arr []的所有子数组进行计数,以使A和B的出现总数相等。如果数组为[1,2,3],A为1,B为2。子数组将为[3],[1,2],[1,2,3]。
让我们通过示例来理解。
输入− arr [] = {2,2,1,1,1,5}; A = 1,B = 5
输出-等于数量的子数组的数量 两个给定元素的出现次数是-4
说明-Subaarays将是-[2],[2],[2,2],[1,5]。前三个具有0出现的1和5,最后一个具有1出现两个。
输入− arr [] = {5,3,7,5,3}; A = 1,B = 2
输出-等于数量的子数组的数量 给定两个元素的出现是-15
说明-Subaarays将是-(0次出现1和2)
[5], [3], [7], [5], [3] - 5 [5,3], [3,7], [7,5], [5,3] - 4 [5,3,7], [3,7,5], [7,5,3] - 3 [5,3,7,5], [3,7,5,3] - 2 [5,3,5,7,5] - 1
共有15个子数组,且1和2均未出现(0次出现)。
我们将使用两个for循环遍历数组,以生成所有可能的子数组。从i = 0到i <= size-1,从j = i到j <= size-1。形成的子数组将在arr [i]至arr [j]之间。计算每个子数组中A和B的频率。如果相等,则增加计数。
取数字的数组arr []。
函数sub_EqualOccurrence(int arr [],int size,int A,int B)获取数组,并返回等于no的子数组的数量。A和B。
将初始计数设为0。
我们将使用两个for循环遍历数组,这些循环从i = 0到i <= size-1,从j = 0到j <= size-1。
对于子数组arr [i]至arr [j]中的A和B的数目,将两个变量total_A,total_B设为0。
将arr [j]与A和B进行比较。如果arr [j]为A或B,则增加各自的计数(total_A或total_B)。
如果total_A == total_B。增量计数。(子数组具有与元素相同的A和B数)。
在两个循环的最后,返回count作为结果。
#include <bits/stdc++.h> using namespace std; int sub_EqualOccurrence(int arr[], int size, int A, int B){ int count = 0; for (int i = 0; i <= size - 1; i++){ int total_A = 0; int total_B = 0; for (int j = i; j <= size - 1; j++){ if (arr[j] == A){ total_A++; } else if (arr[j] == B){ total_B++; } if(total_A == total_B){ count++; } } } return count; } //驱动程式码 int main(){ int arr[] = { 2, 3, 1, 1, 4, 5 }; int size = sizeof(arr) / sizeof(arr[0]); int A = 1, B = 5; cout<<"Count of subarrays with equal number of occurrences of two given elements are: "<<sub_EqualOccurrence(arr, size, A, B); return (0); }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of subarrays with equal number of occurrences of two given elements are: 5