ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ซึ่งประกอบด้วยจำนวนเต็ม N งานของเราคือการหาคู่ในอาร์เรย์ที่มีผลรวมอยู่แล้วในอาร์เรย์ เราต้องหาคู่ที่มีค่าผลรวม =ค่าในอาร์เรย์
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
arr[] = {1, 2, 4, 6, 7} ผลลัพธ์
(1, 6), (2, 4)
คำอธิบาย
สำหรับคู่ (1, 6) ผลรวมของค่าคือ 7 ซึ่งมีอยู่ในอาร์เรย์
สำหรับคู่ (2, 4) ผลรวมของค่าคือ 6 ซึ่งมีอยู่ในอาร์เรย์
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการค้นหาคู่ทั้งหมดที่เป็นไปได้โดยใช้องค์ประกอบของอาร์เรย์ จากนั้นคำนวณผลรวมของค่า parir ค้นหาค่าผลรวมนี้ในอาร์เรย์ พิมพ์ถ้ามี
นอกจากนี้เรายังจะมีตัวนับจำนวนคู่ และถ้าเป็น 0 เราจะพิมพ์ว่าไม่พบคู่ใด
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
void findSumPairsArr(int arr[], int n){
int pairCount = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = 0; k < n; k++) {
if (arr[i] + arr[j] == arr[k]) {
cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum = "<<(arr[i] + arr[j])<<"\n";
pairCount++;
}
}
}
}
if (!pairCount)
cout<<"No Such Pairs found !";
}
int main() {
int arr[] = { 1, 2, 4, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Pairs in array whose sum already exists in array : \n";
findSumPairsArr(arr, n);
return 0;
} ผลลัพธ์
จับคู่ในอาร์เรย์ที่มีผลรวมอยู่แล้วในอาร์เรย์ -
( 1, 6 ), sum = 7 ( 2, 4 ), sum = 6
อีกวิธีหนึ่งที่มีประสิทธิภาพมากกว่าคือการแก้ปัญหาโดยใช้ตารางแฮช เราจะตรวจสอบปารีสทั้งหมดแล้วคำนวณผลรวมและตรวจสอบว่ามีอยู่ในอาร์เรย์หรือไม่และติดตาม หาก pairCount เป็น 0 ให้พิมพ์ "No such Pairs found !".
ที่นี่ การนำตารางแฮชไปใช้ใน c ทำได้โดยใช้ unordered_set
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void findSumPairsArr(int arr[], int n) {
unordered_set<int> HT;
for (int i = 0; i < n; i++)
HT.insert(arr[i]);
int pairCount = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (HT.find(arr[i] + arr[j]) != HT.end()) {
cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum =
"<<(arr[i] + arr[j])<<"\n";
pairCount ++;
}
}
}
if (!pairCount)
cout<<"No Such Pairs found !";
}
int main() {
int arr[] = {1, 2, 4, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Pairs in array whose sum already exists in array : \n";
findSumPairsArr(arr, n);
return 0;
} ผลลัพธ์
จับคู่ในอาร์เรย์ที่มีผลรวมอยู่แล้วในอาร์เรย์ -
( 1, 6 ), sum = 7 ( 2, 4 ), sum = 6