如何求两数组和的前n项

nkmily 2009-03-31 11:29:56
有两个有序递增数组a[n]和b[n],如何在O(n)时间内求出两数组和的前n项最小值。

数组和是指所有的 a[i]+b[j](0<=i<n, 0<=j<n)所组成的数组
...全文
125 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
windless0530 2009-04-01
  • 打赏
  • 举报
回复
随手写的:

int ai = 0, bi = 0; // 数组下标
int count = 0;

while (ai < aLen - 1 || bi < bLen - 1)
{
printf("%d", a[ai] + b[bi]);
count++;
if (count == N) break;

if (ai == aLen - 1) bi++;
else if (bi == bLen - 1) ai++;
else
{
if (a[ai + 1] - a[ai] < b[bi + 1] - b[bi]) ai++;
else bi++;
}
}
nkmily 2009-03-31
  • 打赏
  • 举报
回复
不是
我举个例子吧,假设a[n]={1,3 5} b[n]={2,3,6}
那么我要求的是 a+b按升序的前n个 就是c[n]={3,4,5} (1+2,1+3,3+2)

[Quote=引用 2 楼 ydntlk 的回复:]
楼主说的是下面的这个意思么?


C/C++ code
int sum = 0;
for (int i = 0; i < n; ++i) {
int j = 0, k = 0;
if (a[j] <= b[k])
sum += a[j++];
else
sum += b[k++];
}
[/Quote]
ydntlk 2009-03-31
  • 打赏
  • 举报
回复
楼主说的是下面的这个意思么?


int sum = 0;
for (int i = 0; i < n; ++i) {
int j = 0, k = 0;
if (a[j] <= b[k])
sum += a[j++];
else
sum += b[k++];
}
sherrik 2009-03-31
  • 打赏
  • 举报
回复
既然有序递增了 那要求最小值是不是a[0]+b[0] ?
还是我没理解题目意思?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧