สมมติว่าเราได้ให้อาร์เรย์ที่ไม่ได้เรียงลำดับสองอาร์เรย์ arr1[] และ arr2[] ภารกิจคือการนับจำนวนองค์ประกอบทั้งหมดใน arr2[] ซึ่งแต่ละองค์ประกอบของ arr1[] มีค่าน้อยกว่าหรือเท่ากับองค์ประกอบที่มีอยู่ใน arr2[] อย่างไรก็ตาม องค์ประกอบในอาร์เรย์ทั้งสองก็อาจมีซ้ำกันเช่นกัน
ตัวอย่างเช่น
อินพุต-1 −
<ก่อน>N =6M =7arr1[N] ={1, 2, 5, 0, 6, 3}arr2[M] ={0,0,1,2,1,3,4,6,8}ผลผลิต −
4 5 7 2 8 6
แนวทางที่ใช้ในการแก้ปัญหานี้
ในการนับทุกองค์ประกอบของ arr1[] และตรวจสอบว่าน้อยกว่าหรือเท่ากับองค์ประกอบใน arr2[] แนวคิดคือการเรียงลำดับ arr2[] และใช้วิธีการค้นหาแบบไบนารีเพื่อค้นหาองค์ประกอบของ arr1[] ที่น้อยกว่า หรือเท่ากับองค์ประกอบที่มีอยู่ใน arr2[].
-
ป้อนขนาดของ arr1 และ arr1 เป็น 'm' และ 'n'
-
รับอินพุตขององค์ประกอบอาร์เรย์
-
ฟังก์ชัน countInSecond(int *arr1, int *arr2, int m, int n) รับสองอาร์เรย์และขนาดของมันเป็นอินพุตและส่งกลับจำนวนองค์ประกอบที่มีอยู่ใน arr2[]
-
เรียงลำดับ arr2[].
-
วนซ้ำบน arr1[] และใช้การค้นหาแบบไบนารีเพื่อค้นหาองค์ประกอบเฉพาะใน arr2[]
-
คืนค่าจำนวนองค์ประกอบที่น้อยกว่าหรือเท่ากับ
ตัวอย่าง
#includeใช้เนมสเปซ std;void countInSecond(int *nums1,int *nums2,int m,int n){ sort(nums2, nums2+n); int ผม=0; สำหรับ (int i=0;i ผลลัพธ์
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
4 5 7 2 8 6การนับองค์ประกอบทั้งหมดของ arr1 ซึ่งน้อยกว่าหรือเท่ากับองค์ประกอบใน arr2 คือ {4 5 7 2 8 6}