根据分类分别取数据算法

好久没看到算法了,整天就是ssh来ssh去,基本已经忘了曾经对算法,对数据结构的那种乐趣与解出一个问题的快乐。

这周有一个需求,要从一个表里selece数据,但需根据分类分别取记录,每个分类的记录需根据日期字段排序。

总共取10条记录,但有个分类可能存在成百上千条,而有的只有1-2条,而且总共多少分类也是不确定的,下面是两个同事写的两个算法,其中一个还存在问题,而有一个基本可以满足需求,先整理出测试代码如下:

 

测试结果:

getTop:5=5 2=2 1=1 1=1 1=1
selectTop:1000=1 2000=1 3000=5 4000=2 5000=1

第一种算法查询出来的数据总和为:5+2+1+1+1=10

第二种算法查询出来的数据总和为:1+1+5+2+1=10

但是:

当getTop算法里初始值为:

int[] count = new int[]{5,4,4,3,2};  //注意这里一定是排序好的

selectTop算法里初始值为:

 List countCats = new ArrayList();  //实例初始化
     countCats.add(new Object[]{1000,5});
     countCats.add(new Object[]{2000,4});
     countCats.add(new Object[]{3000,4});
     countCats.add(new Object[]{4000,3});
     countCats.add(new Object[]{5000,2});

输出测试结果:

getTop:5=0 4=2 4=3 3=3 2=2
selectTop:1000=3 2000=2 3000=2 4000=2 5000=2

 

虽然看起来第一种算法在效率上要高于第二种算法,但是第一种算法考虑并不全面,故还需改进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值