随笔- 509  文章- 0  评论- 151  阅读- 22万 

2014-05-06 13:23

题目链接

原题:

Finding a pair of elements from two sorted lists(or array) for which the sum of the elements is a certain value. Anyway solution that can do better than O(a.length + b.length)?

题目:给定两个有序的数组,如何从两数组中各选出一个元素使得两元素加起来等于某个目标值。

解法:又是这个“Guy”出的题目,此人想要追求优于O(n + m)的算法。这人代码水平不高,我想他对于算法复杂度的上下界也不知道怎么估计吧。我个人认为不太可能更优化了,因为你找的不是一个元素,而是一对。我的解法,是使用两个iterator,一个在A数组头部,一个在B数组尾部。通过A数组后移,B数组前移来调整相加的结果。这样的算法,复杂度就是O(n + m)的。

代码:

复制代码
 1 // http://www.careercup.com/question?id=6271724635029504
 2 #include <cstdio>
 3 #include <vector>
 4 using namespace std;
 5 
 6 bool twoSortedArraySum(vector<int> &a, vector<int> &b, int target, int &ia, int &ib)
 7 {
 8     int i, j;
 9     int na, nb;
10 
11     na = (int)a.size();
12     nb = (int)b.size();
13 
14     i = 0;
15     j = nb - 1;
16 
17     int sum;
18     while (i <= na - 1 && j >= 0) {
19         sum = a[i] + b[j];
20         if (sum > target) {
21             --j;
22         } else if (sum < target) {
23             ++i;
24         } else {
25             ia = i;
26             ib = j;
27             return true;
28         }
29     }
30     return false;
31 }
32 
33 int main()
34 {
35     vector<int> a, b;
36     int na, nb;
37     int i;
38     int ia, ib;
39     int target;
40     
41     while (scanf("%d%d", &na, &nb) == 2 && (na > 0 && nb > 0)) {
42         a.resize(na);
43         b.resize(nb);
44         for (i = 0; i < na; ++i) {
45             scanf("%d", &a[i]);
46         }
47         for (i = 0; i < nb; ++i) {
48             scanf("%d", &b[i]);
49         }
50         while (scanf("%d", &target) == 1) {
51             ia = ib = -1;
52             if (twoSortedArraySum(a, b, target, ia, ib)) {
53                 printf("%d + %d = %d\n", a[ia], b[ib], target);
54             } else {
55                 printf("Not found.\n");
56             }
57         }
58     }
59     
60     return 0;
61 }
复制代码

 

 posted on   zhuli19901106  阅读(158)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示