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

ค้นหาสี่องค์ประกอบ a, b, c และ d ในอาร์เรย์ที่ a+b =c+d ใน C++


สมมติว่าเรามีรายการจำนวนเต็ม งานของเราคือการหาจำนวนเต็มที่แตกต่างกันสี่จำนวนเป็นสองคู่เช่น (a, b) และ (c, d) โดยที่ a+b =c+d หากมีหลายคำตอบ ให้พิมพ์เพียงคำตอบเดียว สมมติว่าองค์ประกอบอาร์เรย์มีลักษณะดังนี้:A =[7, 5, 9, 3, 6, 4, 2] จากนั้นคู่สามารถเป็น (7, 3) และ (6, 4)

เราจะใช้เทคนิคการแฮช เราใช้ผลรวมเป็นคีย์เป็นคู่เป็นค่าในตารางแฮช เราต้องทำตามขั้นตอนเหล่านี้เพื่อแก้ปัญหานี้

  • สำหรับผมในช่วง 0 ถึง n – 1 ให้ทำ
    • สำหรับ j ในช่วง i + 1 ถึง n – 1 ทำ
      • หาผลรวม
      • หากตารางแฮชมีผลรวมแล้ว ให้พิมพ์คู่ก่อนหน้าและคู่ปัจจุบัน
      • มิฉะนั้น ให้อัปเดตตารางแฮช

ตัวอย่าง

#include<iostream>
#include<map>
using namespace std;
bool getTwoPairs(int arr[], int n) {
   map<int, pair<int, int> > hash_table;
   for (int i = 0; i < n; ++i) {
      for (int j = i + 1; j < n; ++j) {
         int sum = arr[i] + arr[j];
         if (hash_table.find(sum) == hash_table.end())
            hash_table[sum] = make_pair(i, j);
         else {
            pair<int, int> pp = hash_table[sum];
            cout << "(" << arr[pp.first] << " + " << arr[pp.second] << ") = (" << arr[i] << " + " << arr[j] << ")";
            return true;
         }
      }
   }
   cout << "No pairs found";
   return false;
}
int main() {
   int arr[] = {7, 5, 9, 3, 6, 4, 2};
   int n = sizeof arr / sizeof arr[0];
   cout << "The pairs are: ";
   getTwoPairs(arr, n);
}

ผลลัพธ์

The pairs are: (7 + 4) = (5 + 6)