已经结贴。 花费时间:17ms 起始位置:9736 9745 9740 9747 9796 当前位置:316 318 318 318 318 前序位置:319 319 319 320 319 在50000个数据的情况下,用17ms找到合适的位置,效果不错,100红包已发,本帖结束。######我大体明白楼主的意思了 大约就是这么一个东西
/** * 存放有序不定长数组的list */
private List orderNoList;
/**
*如果按照某种顺序从list中取出一定数量的数字的话
*param acquiredNoSum 所取得数字的总数量
*return eachAcquiredNoCount 各自所取数字的数量
*/
public int[] geteachAcquiredNoCount (int acquiredNoSum){
// todo
return new int[10] ;
}
不过你没有说明是按照什么样的顺序取得数字,但你强调了取出有序数我暂且按照以下算法从数组中取数 假定a为下一个被取出的数,a满足以下条件 1,a存在于list orderNoList中的一个数组中 2,假定有序数组b存放有所有已被取出的数并且c表示max(b), 则a=min(orderNoListv中未取数)(多个数组中的最小数字相等时取靠前的一个) 并且a>=c 可以将具体的取数算法封装起来,替换成自己需要的算法 具体算法为 用一个int 数组当作游标 另一个int数组存放待比较的数 通过游标得到待比较数组 得出待比较数组中最小的数对应数组序号以及,相应游标加1,从相应数组取出一个数更新待比较数组,,重复这一步直到所有游标之和等于需取出数的数量 返回游标数组 算法时间复杂度为O(n)与从n个数中找出最小的数是一个数量级,我觉得不可