C++中統計出現次數相同的兩個給定元素的子陣列個數
給定一個整數陣列 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
解釋 − 子陣列將是 − [2],[2],[2,2],[1,5]。前三個子陣列中 1 和 5 的出現次數為 0,最後一個子陣列中兩者都出現 1 次。
輸入 − arr[] = { 5,3,7,5,3 }; A=1, B=2
輸出 − 出現次數相同的兩個給定元素的子陣列個數為 − 15
解釋 − 子陣列將是 − (1 和 2 的出現次數為 0 的那些)
[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) 獲取陣列並返回 A 和 B 出現次數相同的子陣列的個數。
將初始計數設定為 0。
我們將使用兩個 for 迴圈遍歷陣列,從 i=0 到 i<=size-1,以及 j=0 到 j<=size-1。
取兩個變數 total_A、total_B 為 0,分別表示子陣列 arr[i] 到 arr[j] 中 A 和 B 的個數。
將 arr[j] 與 A 和 B 進行比較。如果 arr[j] 是 A 或 B,則遞增相應的計數(total_A 或 total_B)。
如果 total_A==total_B,則遞增計數。(子陣列中 A 和 B 的元素個數相同)。
在兩個迴圈結束時,返回計數作為結果。
示例
#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;
}
// Driver code
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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP