একটি ইন্টিজার সেট দেওয়া আছে। সেটের মধ্যে থেকে a, b, c, d খুঁজে বের করতে হবে যাতে a+b+c=d এবং d সর্বোচ্চ হয়। Hashing ব্যবহার করুন: সব জোড়ার যোগফল (a+b) হ্যাশ টেবিলে রাখুন, তারপর (c,d) জোড়া চেক করুন d-c হ্যাশে আছে কিনা।
উদাহরণ
#include <iostream>
#include <unordered_map>
#include <climits>
using namespace std;
int findElementsInSet(int arr[], int n) {
unordered_map> mp;
for (int i = 0; i < n-1; i++)
for (int j = i+1; j < n; j++)
mp[arr[i]+arr[j]] = {i,j};
int d = INT_MIN;
for (int i = 0; i < n-1; i++)
for (int j = i+1; j < n; j++) {
int diff = abs(arr[i] - arr[j]);
if (mp.count(diff)) {
auto p = mp[diff];
if (p.first != i && p.first != j && p.second != i && p.second != j)
d = max(d, max(arr[i], arr[j]));
}
}
return d;
}
int main() {
int arr[] = {2,3,5,7,12};
int n = 5;
int res = findElementsInSet(arr, n);
if (res == INT_MIN) cout << "Cannot find d";
else cout << "Max value of d is " << res;
return 0;
}
আউটপুট
Max value of d is 12