有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列。对于1<=i,j<=k,求k个最小的(ai+bj)。要求算法尽量高效。
来源:互联网 发布:淘宝外包美工多少钱 编辑:程序博客网 时间:2024/05/16 04:40
有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列。对于1<=i,j<=k,求k个最小的(ai+bj)。要求算法尽量高效。
int *min_k(int *A, int *B, int len1, int len2, int k) {if (A == NULL || B == NULL || k <= 0)return NULL;int i, j;int *tmp = new int[k];i = len1;j = len2;while (i > 0 && j > 0) {//当前情况是否满足条件//移动哪一个数组的元素if (A[i - 1] >= B[j - 1]) {//是否可移动if ((i - 1) * j >= k)i--;elsebreak;} else {if ((j - 1) * i >= k)j--;elsebreak;}}int count = 0;//A[i-1]>B[i-1],则先计算B元素的和,避免A[i-1]算入if (A[i - 1] > B[j - 1]) {int p, q;for (p = 0; p < i; p++) {for (q = 0; q < j; q++) {if (count < k) {cout << "A:" << A[p] << " B: " << B[q] << " ";tmp[count++] = A[p] + B[q];} elsebreak;}}} else {int p, q;for (p = 0; p < j; p++) {for (q = 0; q < i; q++) {if (count < k) {cout << "B:" << B[p] << " A: " << A[q] << " ";tmp[count++] = B[p] + A[q];} elsebreak;}}}return tmp;}
0 0
- 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列,对于1<=i,j<=k,求k个最小的(ai+bj),要求算法尽量高效
- 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列。对于1<=i,j<=k,求k个最小的(ai+bj)。要求算法尽量高效。
- 有两个序列A和B,求k个最小的(ai+bj)
- 两个有序数组,A[k]和B[k]长度都为k。求前k个最小的(a[i]+b[j])
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,
- select * from A1,A2 where A1.a = A2.b
- 给定一个数列a1,a2,a3,...,an和m个三元组表示的查询,对于每个查询(i,j,k),输出ai,ai+1,...,aj的升序排列中第k个数。
- 数组A,有一千万个数,数组B同样也有千万多个数,然后从A和B当中随意找一个数字A1和B1,A1-B的绝对值是C,保证C最小。求A1和B1
- 三个已排序的数组a,b,c,求i,j,k使a[i]=b[j]=c[k]
- 求浮点数数组A={A1,A2,A3,…,An}中,Aj-Ai(j>i)的最大值。要求时间复杂度越小越好
- [a,b]=>k
- 数组元素交叉排列的算法题(a1 a2 a3 .. an b1 b2 b3 .. bn -->a 1 b1, a2 b2, a3 b3, .. an bn )
- 数组元素交叉排列的算法题(a1 a2 a3 .. an b1 b2 b3 .. bn -->a 1 b1, a2 b2, a3 b3, .. an bn )
- 数组元素交叉排列的算法题(a1 a2 a3 .. an b1 b2 b3 .. bn -->a 1 b1, a2 b2, a3 b3, .. an bn )
- 有两个序列a,b,要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 搜狗2014年笔试题-两递增数组A和B,求A[i]+B[j]中前k个最小值(Java)
- 搜狗2014年笔试题-两递增数组A和B,求A[i]+B[j]中前k个最小值(Java)
- A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C();
- OGRE摄像机
- 项目插入重复数据问题解决方案
- 阿里云服务器添加swap
- bash学习
- 小程序wx.request https TLS1.2环境配置
- 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列。对于1<=i,j<=k,求k个最小的(ai+bj)。要求算法尽量高效。
- 需求分析Tips
- 关于c#实现计算机音频接口输出固定频率波形的一些问题
- (转)关于密钥管理的几个设计原则
- [00100] 字符串和文本
- redis.sentinel选择指定数据库
- Git教程学习(五)—远程仓库
- MacOS下rvm安装新版本ruby时报curl SSL证书错误的解决
- C语言专题精讲篇_4.3.指针才是C语言的精髓