在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

回到顶部