分享个关于数组中根据刷新时间间隔计算对应值的问题。
题目描述:
特斯拉发射火箭,从start时刻开始(包括start),由于发射台需要准备时间才能发射,因此需要period个单位时间就会有发射机会(不限制发射数量,只要若干火箭就绪则可以发射)。
现在有n个订单需要发射,用二维数组表示,
即int[][]= launches,第一个数字代表接收到该订单时刻,第二个数字代表准备就绪需要花费的时间。
比如[[1,2],[4,6]],第一个订单在1时刻收到,需要2个单位时间准备就绪,在时刻3才能发射;第二个订单在4时刻收到,需要6个单位时间准备就绪,在时刻10才能发射。
请输出一个数组,表示每次发射的火箭数量,若为0则不输出这次的发射数量。
public static int[] getLaunches(int[][] launches, int start, int interval) {
// 将每个数组的start+interval之和存入list
List<Integer> list = new ArrayList<>();
for (int i = 0; i < launches.length; i++) {
list.add(launches[i][0] + launches[i][1]);
}
int count = 0;
Collections.sort(list);
List<Integer> res = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > start) {
// 当前值超过start,添加count并重置count和start
if (i != 0) {
res.add(count);
}
count = 1;
start += interval;
} else {
count++;
}
}
res.add(count);
int[] array = list.stream().mapToInt(x -> x).toArray();
return array;
}