2024年6月17日Blog

分组实现TopN算法

代码如下:

package fjdm;
import java.util.ArrayList;
import java.util.List;
/**
 * 已知几个递减有序的m个数组,求这几个数据前k大的数
 * a[4,3,2,1],b[6,5,3,1] -> result[6,5,4]
 */
public class TopKByMerge{
 public static int[] getTopK(List<List<Integer>>input,int k){
	int index[]=new int[input.size()];//保存每个数组下标扫描的位置;
	int result[]=new int[k];
	for(int i=0;i<k;i++){
	   int max=Integer.MIN_VALUE;
	   int maxIndex=0;
	   for(int j=0;j<input.size();j++){
		   if(index[j]<input.get(j).size()){
				if(max<input.get(j).get(index[j])){
					max=input.get(j).get(index[j]);
					maxIndex=j;
				}
		   }
	   }
	   if(max==Integer.MIN_VALUE){
		   return result;
	   }
	   result[i]=max;
	   index[maxIndex]+=1;
	   
	}
	return result;
 } 
 public static void main(String[] args) {
	 List<Integer> a = new ArrayList<Integer>();
	 a.add(4);
	 a.add(3);
	 a.add(2);
	 a.add(1);
	 List<Integer> b = new ArrayList<Integer>();
	 b.add(6);
	 b.add(5);
	 b.add(3);
	 b.add(1);
	 List<List<Integer>> ab = new ArrayList<List<Integer>>();
	 ab.add(a);
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值