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

更新於:2020年12月1日

339 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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