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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP