2014-04-29 00:04
题目:给定一个整数数组,找出所有加起来为指定和的数对。
解法1:可以用哈希表保存数组元素,做到O(n)时间的算法。
代码:
1 // 17.12 Given an array of integers and target value, find all pairs in the array that sum up to the target. 2 // Use hash to achieve O(n) time complexity. Duplicates pairs are skipped. 3 #include <cstdio> 4 #include <unordered_map> 5 #include <vector> 6 using namespace std; 7 8 int main() 9 { 10 vector<int> v; 11 unordered_map<int, int> um; 12 int n, i; 13 int x, y; 14 int target; 15 16 while (scanf("%d", &n) == 1 && n > 0) { 17 scanf("%d", &target); 18 19 v.resize(n); 20 for (i = 0; i < n; ++i) { 21 scanf("%d", &v[i]); 22 } 23 24 // duplicate pairs are skipped 25 for (i = 0; i < n; ++i) { 26 um[v[i]] = um[v[i]] + 1; 27 } 28 29 unordered_map<int, int>::iterator it, it2; 30 for (it = um.begin(); it != um.end(); ++it) { 31 x = it->first; 32 y = target - x; 33 if (x > y) { 34 continue; 35 } 36 37 --it->second; 38 if ((it2 = um.find(y)) != um.end() && it2->second > 0) { 39 printf("(%d, %d)\n", x, y); 40 } 41 ++it->second; 42 } 43 44 v.clear(); 45 um.clear(); 46 } 47 48 return 0; 49 }
解法2:先将数组排序,然后用两个iterator向中间靠拢进行扫描。总体时间是O(n * log(n))。
代码:
1 // 17.12 Given an array of integers and target value, find all pairs in the array that sum up to the target. 2 // O(n * log(n) + n) solution. 3 #include <algorithm> 4 #include <cstdio> 5 #include <vector> 6 using namespace std; 7 8 int main() 9 { 10 vector<int> v; 11 int n, i; 12 int ll, rr; 13 int target; 14 15 while (scanf("%d", &n) == 1 && n > 0) { 16 scanf("%d", &target); 17 18 v.resize(n); 19 for (i = 0; i < n; ++i) { 20 scanf("%d", &v[i]); 21 } 22 sort(v.begin(), v.end()); 23 ll = 0; 24 rr = n - 1; 25 26 int sum; 27 while (ll < rr) { 28 sum = v[ll] + v[rr]; 29 if (sum < target) { 30 while (ll + 1 < rr && v[ll] == v[ll + 1]) { 31 ++ll; 32 } 33 ++ll; 34 } else if (sum > target) { 35 while (rr - 1 > ll && v[rr] == v[rr - 1]) { 36 --rr; 37 } 38 --rr; 39 } else { 40 printf("(%d, %d)\n", v[ll], v[rr]); 41 while (ll + 1 < rr && v[ll] == v[ll + 1]) { 42 ++ll; 43 } 44 ++ll; 45 } 46 } 47 48 v.clear(); 49 } 50 51 return 0; 52 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)