《重启9》
笔试算法真题-acm模式-求两个数组的各任意两个元素之和,并输出降序排序出来4个
前言
博主最近,参加了一次笔试中的算法题,有要求要用acm模式去实现,跟同学们自身在LeetCode上面做的算法题有点不太一样,其中我们做的只是要写核心代码就行。所以,博主分享一波用asm模式怎么去完成一条java的算法题
上题
要求
现有两个不同元素组成长度相同的数组,求两个数组的各任意两个元素之和,并通过降序排序输出最大的4个和
运行时间<2s
输入: 5 4
1 2 3 4 5
3 4 7 9 11
提示:第一排分别为:数组长度和输出次数
第二和第三排分别为:两个数组
输出: 16 15 14 14
实现代码
import java.util.LinkedList;
import java.util.Scanner;
class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
/**
* 先获取第一排的数字
*/
int n=in.nextInt(); //数组长度
int k=in.nextInt(); //输出次数
while (in.hasNextInt()){
int[] t1=new int[n];
int[] t2=new int[n];
/**
* 通过两轮for循环把两个数组装上元素
*/
for (int i=0;i<n;i++){
t1[i]=in.nextInt();
}
for (int i=0;i<n;i++){
t2[i]=in.nextInt();
}
/**
* 把所以的和放进LinkedList列表
*/
LinkedList<Integer> list=new LinkedList();
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
list.add(t1[i]+t2[j]);
}
}
/**
* 典中典方法让数据重新排序
*/
for (int i=0;i<n*n;i++){
for (int j=i+1;j<n*n;j++){
int a=list.get(i);
int b=list.get(j);
if(a>b){
list.set(i,b);
list.set(j,a);
}
}
}
/**
* 从后面输出注意:i>list.size()-(k+1)
*/
for (int i =list.size()-1; i>list.size()-(k+1); i--){
System.out.print(list.get(i)+" ");
}
break;
}
}
}
运行结果: