//找出数组中是否有两个对数(a,b)和(c,d)使 a+b=c+d ,其中 a,b,c,d 是不同元素。比如: {1, 9, 23, 3, 33, 7}; 1+9 = 3+7
// 分析:如果使用四重循环的话时间复杂度为O(N ^ 4) ,时间复杂度太高。
//下面是使用 Hash 法,通过存数对的和在哈希表中,判断是否已经存储过相同的和
bool findPairs(vector<int> arr) {
unordered_map <int, std::pair<int,int>> hashMap;
int n = arr.size();
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
int sum = arr[i] + arr[j];
if (hashMap.find(sum) == hashMap.end()) {
hashMap.insert({ sum, pair<int,int>(i, j) });
}
else {
pair<int, int> pair = hashMap[sum];
cout<< arr[pair.first] <<" " <<arr[pair.second]<<endl ;
cout << arr[i] << " " << arr[j];
return true;
}
}
}
return false;
}
int main()
{
bool ret = findPairs({ 1, 9, 23, 3, 33, 7 });
return 0;
}
C++ 实现从数组中找出a+b=c+d的两个数对
最新推荐文章于 2023-05-20 22:07:26 发布