C++中統計具有相同數量的1和0的子陣列


給定一個僅包含0和1的陣列arr[]。目標是統計arr[]的所有子陣列,使得所有子陣列中0和1的出現次數相等。如果陣列是[1,0,0]。子陣列將只有[1,0]。

讓我們透過例子來理解。

輸入 − arr[] = { 0, 0, 1, 1, 1, 0 };

輸出 − 具有相同數量的1和0的子陣列數量為- 4

說明 − 子陣列將是-

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

說明 − 子陣列將是- 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)接受陣列並返回具有相同數量的0和1的子陣列的計數。

  • 將初始計數設為0。

  • 我們將使用兩個for迴圈從i=0到i<=size-1以及j=0到j<=size-1遍歷陣列。

  • 取兩個變數total_0、total_1為0,分別表示子陣列arr[i]到arr[j]中0和1的數量。

  • 將arr[j]與0和1比較。如果arr[j]是0或1,則遞增相應的計數(total_0或total_1)。

  • 如果total_0==total_1。遞增計數。(子陣列具有相同數量的0和1作為元素)。

  • 在兩個迴圈結束時,返回計數作為結果。

示例

 線上演示

#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

更新於:2020年12月1日

425 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.