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