在C ++中计数相等数目的1和0的子数组
给我们一个数组arr [],它只包含0和1。目标是对arr []的所有子数组进行计数,以使0和1的出现总数相等。如果数组为[1,0,0]。子数组将仅为[1,0]。
让我们通过示例来理解。
输入− arr [] = {0,0,1,1,1,0};
输出-等于1和0的子数组数为-4
说明-Subaarays将是-
arr[0 to 3] = [0,0,1,1],arr[1 to 2] = [0,1],
arr[4 to 5] =[1,0],
Arr[0 to 5] =[0,0,1,1,1,0].
输入− arr [] = {0,1,1,1,1};
输出-等于1和0的子数组数为-1
说明-Subaarays将为-arr [0至1] = [0,1]
以下程序中使用的方法如下
我们将使用两个for循环遍历数组,以生成所有可能的子数组。从i = 0到i <= size-1,从j = i到j <= size-1。形成的子数组将在arr [i]至arr [j]之间。在每个子数组中计数0和1的频率。如果相等,则增加计数。
取数字的数组arr []。
函数sub_zeroes_ones(int arr [],int size)获取数组,并返回等于no的子数组的计数。的0和1。
将初始计数设为0。
我们将使用两个for循环遍历数组,这些循环从i = 0到i <= size-1,从j = 0到j <= size-1。
对于子数组arr [i]至arr [j]中的0和1,将两个变量total_0,total_1设为0。
比较arr [j]与0和1。如果arr [j]为0或1,则递增各自的计数(total_0或total_1)。
如果total_0 == total_1。增量计数。(子数组与元素具有相同数量的0和1)。
在两个循环的最后,返回count作为结果。
示例
#include <bits/stdc++.h>using namespace std;
int sub_zeroes_ones(int arr[], int size){
int count = 0;
for (int i = 0; i <= size - 1; i++){
int total_0 = 0;
int total_1 = 0;
for (int j = i; j <= size - 1; j++){
if (arr[j] == 0){
total_0++;
}
else if (arr[j] == 1){
total_1++;
}
if(total_0 == total_1){
count++;
}
}
}
return count;
}
int main(){
int arr[] = {0, 1, 1, 0, 0};
int size = sizeof(arr)/sizeof(arr[0]);
cout<<"Count of subarrays with equal number of 1’s and 0’s are: "<<sub_zeroes_ones(arr, size);
}
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of subarrays with equal number of 1’s and 0’s are: 4
以上是 在C ++中计数相等数目的1和0的子数组 的全部内容, 来源链接: utcz.com/z/340771.html