从自然数序列创建序列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Run Code Online (Sandbox Code Playgroud)
除去每2在数第2步:
1 3 5 7 9 11 13 15 17 19 21 23
Run Code Online (Sandbox Code Playgroud)
删除第3步中的每个第3个数字(从上一个序列开始):
1 3 7 9 13 15 19 21
Run Code Online (Sandbox Code Playgroud)
删除第4步中的每4个数字(从上一个序列开始):
1 3 7 13 19
Run Code Online (Sandbox Code Playgroud)
等等...现在,我们可以说,序列的第4个数字将是13.
这里有定义和正确的解决方案:http://oeis.org/A000960
我的任务是找到序列的第1000个成员.我已经为此编写了一个算法,但我觉得它很慢(当我尝试使用第10,000个成员时需要大约13秒).它的作用是:
我number每步增加2,因为我们知道没有偶数.
在counters数组中,我存储每个步骤的索引.如果数字是第x步中的xth,我必须删除它,例如第3步中的数字5.我为下一步启动了一个计数器.
ArrayList<Long> list …Run Code Online (Sandbox Code Playgroud)为什么我不能以这种方式清除时间戳中的时间:
one day == 24 * 3600 * 1000 == 86400000 milliseconds.
long ms = new Date().getTime(); //Mon Sep 03 10:06:59 CEST 2012
Date date = new Date(ms - (ms % 86400000));
Run Code Online (Sandbox Code Playgroud)
为什么是这个Mon Sep 03 02:00:00 CEST 2012而不是Mon Sep 03 00:00:00 CEST 2012?