好久没看到算法了,整天就是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
虽然看起来第一种算法在效率上要高于第二种算法,但是第一种算法考虑并不全面,故还需改进。