搜狗2014年-数据结构-笔试题:
已知两递增数组A={ai}和B={bj},对于A[i]+B[j],输出前k个最小值
解题思路:
初始将A[0]+B[0]压入最小堆h,然后每弹出一个元素(A[i]+B[j])则将(A[i]+B[j+1])压入堆,对于(A[i]+B[0])额外加入(A[i+1]+B[0]),出堆k次即可得到前k个A[i]+B[j]的最小值
代码如下:
#include <iostream>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
struct Pair {
int ai;
int bj;
int val;
Pair() {
ai = bj = val = 0;
}
Pair(int i, int j, int val) {
ai = i;
bj = j;
this-