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

นับคู่จากสองอาร์เรย์ที่มีผลรวมเท่ากับ K ใน C++


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