เราได้รับอาร์เรย์สองชุด Arr1[] และ Arr2[] และจำนวน K เป้าหมายคือการหาคู่ที่ไม่ซ้ำกันขององค์ประกอบของอาร์เรย์ทั้งสองเพื่อให้ผลรวมของพวกเขาคือ K คู่จะมีรูปแบบ ( Arr1[i], Arr2[j ] ) โดยที่ Arr1[i]+Arr2[j]==K.
เราจะสำรวจโดยใช้สองลูปสำหรับ i และ j ถ้า sum (Arr1[i]+Arr2[j])==K. และคู่นี้ไม่มีอยู่ใน unordered_map
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
<ก่อน>Arr1[]={ 1,3,2,4,3,2 }; Arr2[]={ 0,2,1,2,3 }; K=4ผลผลิต
จำนวนคู่ที่มีผลรวม K :4
คำอธิบาย
คู่จะเป็น( Arr1[0], Arr2[4] ) → (1,3)( Arr1[1], Arr2[2] ) → (3,1)( Arr1[2], Arr2[1] ) → (2,2)( Arr1[3], Arr2[2] ) → (3,1)คู่อื่น ๆ ทั้งหมดมีอยู่แล้ว รวมคู่ที่ไม่ซ้ำทั้งหมด 4.
ป้อนข้อมูล
<ก่อน>Arr1[]={ 0,2,1,2,3}; Arr2[]={ 1,1,1,1,1 }; K=3ผลผลิต
จำนวนคู่ที่มีผลรวม K :1
คำอธิบาย
คู่จะเป็น( Arr1[1], Arr2[0] ) → (2,1)คู่อื่น ๆ ทั้งหมดมีอยู่แล้ว รวมคู่ที่ไม่ซ้ำทั้งหมด 1.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้อาร์เรย์สองอาร์เรย์ Arr1[] และ Arr2[] และตัวแปร K สำหรับผลรวม
-
Len1 และ Len2 ใช้เพื่อระบุความยาวของอาร์เรย์ทั้งสอง
-
ฟังก์ชัน pairsumisK(int arr1[],int arr2[],int k,int l1,int l2) รับตัวแปรทั้งหมดและคืนค่าจำนวนคู่ขององค์ประกอบที่ไม่ซ้ำจากอาร์เรย์ทั้งสองด้วย sum=k
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับคู่
-
ใช้ unordered_map umap เพื่อเก็บคู่ที่ไม่ซ้ำ
-
สำรวจทั้งสองอาร์เรย์โดยใช้สองลูป
-
สำหรับองค์ประกอบใน arr1[] จาก i=0 ถึง i
-
ตรวจสอบว่า sum arr1[i]+arr2[j]=k หรือไม่ ถ้าใช่ ให้ตรวจสอบว่าคู่นี้มีอยู่ใน umap.find(....)==umap.end() หรือไม่
-
หากไม่เพิ่มคู่นี้ใน umap และนับเพิ่มขึ้น
-
เมื่อสิ้นสุดการวนซ้ำทั้งหมดจะมีจำนวนคู่ดังกล่าวทั้งหมด
-
คืนค่าการนับเป็นผลลัพธ์
ตัวอย่าง
#includeใช้เนมสเปซ std;int pairsumisK(int arr1[],int arr2[],int k,int l1,int l2){ จำนวน int =0; unordered_map umap; สำหรับ (int i =0; i ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
จำนวนคู่ที่มีผลรวม K :0