Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับอาร์เรย์ย่อยที่มีจำนวนการเกิดขึ้นเท่ากันของสององค์ประกอบที่กำหนดใน 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

คำอธิบาย − Subaarays จะเป็น − [2], [2], [2,2], [1,5] สามรายการแรกมี 0 รายการของ 1 และ 5 รายการสุดท้ายมี 1 รายการของทั้งสองรายการ

ป้อนข้อมูล − arr[] ={ 5,3,7,5,3 }; A=1, B=2

ผลผลิต − จำนวนอาร์เรย์ย่อยที่มีจำนวนเท่ากัน ของการเกิดขึ้นของสององค์ประกอบที่กำหนดคือ − 15

คำอธิบาย − Subaarays จะเป็น − ( ที่มี 0 รายการของ 1 และ 2 )

[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 subarrays ที่ไม่มีการเกิดขึ้น ( 0 รายการ) ของทั้ง 1 และ 2

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

เราจะสำรวจอาร์เรย์โดยใช้สองลูปเพื่อสร้างอาร์เรย์ย่อยทั้งหมดที่เป็นไปได้ จาก 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

  • เราจะสำรวจอาร์เรย์โดยใช้สองลูปจาก i=0 ถึง i<=size-1 และ j=0 ถึง j<=size-1

  • ใช้ตัวแปร total_A สองตัว, total_B เป็น 0 สำหรับจำนวนของ A และ B ใน subarray arr[i] ถึง arr[j]

  • เปรียบเทียบ 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