在 C++ 中查找数组中四个元素 a、b、c 和 d,使得 a+b = c+d
假设我们有一个整数列表。我们的任务是找到四个不同的整数作为两对,例如 (a, b) 和 (c, d),使得 a+b = c+d。如果有多个答案,则只打印一个。假设数组元素如下:A = [7, 5, 9, 3, 6, 4, 2],则对可以是 (7, 3) 和 (6, 4)
这里我们将使用哈希技术。我们使用和作为键,对作为哈希表中的值。我们必须遵循以下步骤来解决此问题。
- 对于 i 从 0 到 n – 1,执行
- 对于 j 从 i + 1 到 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)
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP