algorithm--数组分批次算法
要求
对一个数组,按指写个数n,划为一组。
比如有一个数组,包含1200000
的数据,要求每1000
为一组。放到一个新的Array里要怎么处理呢。
方法肯定有很多,可以一一来验证。
取模
可能是最简单的方式:取模。可以用少最数据验证一下。
思路很简单:
- 对 step 取模,每到1000就打印一下,这一步也机以创建新的数组都可以的
- else就是普通的处理
1 | public class Test { |
结果:
1 | 0 |
分段
这个思路是:把每一段的start
和end
直接算出来。
这样有一个好处,就是可以提前知道每一段的位置,这样可以提前做一些处理。比如,在并发场景下,可以把每一段的start
和end
直接拿到,提交给不是的线程去处理。
实现
1 | public class ListTest { |
可以看一下结果,下面这样就很棒棒了:
1 | start: 0 |
假设现在有一个线程池,就可以直接用上,比如在定时任务计算一天的订单或者其它批量任务,就可以这样分。
双层for
虽然是双层for,但是很多刚开始学算法的人,未必能想到这种方式。
这种方式的关键点在于,i 的每一段都是 j 的起点,这种方式最大的好处是,煅练算法的小技巧,让自己多了解一种技巧。
结果是一样的,可以自行验证。
1 | public class StepTest { |
总结
分组算法,还有很多种,这里只是抛砖引玉,最主要还是熟练这种用法,当做一个基础的练习。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 人话翻译机!
评论