เราได้รับอาร์เรย์ 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