博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法-求两个有序数组两两相加的值最小的K个数
阅读量:5055 次
发布时间:2019-06-12

本文共 1073 字,大约阅读时间需要 3 分钟。

我的思路是:

用队列,  从(0,0)開始入队,每次出队的时候,选(1,0) (0,1) 之间最小的入队,假设是相等的都入队,假设入过队的就不入了,把出队的k个不同的输出来就可以

我測试了几组数据都是对的。可是可能还是会有BUG,或者我忽略的地方。以下是我的实现代码(假设有错,请大家积极指正)

import java.util.LinkedList;import java.util.Queue;/** * 有两个序列 A 和 B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A 和 B 都按升序排列,对于1<=i,j<=k。求 k 个最小的(ai+bj)。要求算法尽量高效 * @author Administrator * */public class Test {	int k=4;	int a[]=new int[]{1,2,3,4};	int b[]=new int[]{20,30,40,50};	boolean visited[]=new boolean[k*k];	int count=1,empty=a[0]+b[0]-1;	Queue queue=new LinkedList();	int result[]=new int[k];	class Data{		public int x,y,value;		public Data(int x,int y)		{			this.x=x;			this.y=y;			this.value=a[x]+b[y];		}	}	void main() {		for(int i=0;i
t2&&t2!=empty) || (t2!=empty&&t1==empty) || (t1==t2 &&t2!=empty)) { queue.add(new Data(data.x, data.y+1)); } } for(int i=0;i
详细分析请见这个博文

 http://blog.csdn.net/sunnianzhong/article/details/8932374

上面写道有三种方法,1:暴力 ,2:快排, 3:堆排

而我的方法,并没有排序,由于他本身有序,我仅仅是依据规律通过队列入队出队来剪掉不必要的路径。由于没有大量的数据验证,可能会有错误。

我用简单的数字举例是能通过的。

转载于:https://www.cnblogs.com/mengfanrong/p/5354178.html

你可能感兴趣的文章
WebService中的DataSet序列化使用
查看>>
BZOJ 1200 木梳
查看>>
【Linux】【C语言】菜鸟学习日志(一) 一步一步学习在Linxu下测试程序的运行时间...
查看>>
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>
Oracle学习之简单查询
查看>>
log4j配置
查看>>
linux 配置SAN存储-IPSAN
查看>>
java学习笔记之String类
查看>>
pymysql操作mysql
查看>>
Linux服务器删除乱码文件/文件夹的方法
查看>>
牛腩记账本core版本源码
查看>>
Word Break II
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>