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

การนับองค์ประกอบในสองอาร์เรย์โดยใช้ C++


สมมติว่าเราได้ให้อาร์เรย์ที่ไม่ได้เรียงลำดับสองอาร์เรย์ 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}