玩游戏的童鞋都知道,放游戏技能需要冷却时间,这道题就给我们一些技能的释放顺序,让我们计算完全释放这些技能所需要时间。
解答:
我们用res表示当前时间,为了释放当前技能,
1 如果以前没按过当前技能,那就按当前技能吧res++,用map记录按当前技能下一个最早时间为res + 冷却时间 + 1。
2 如以前按过当前技能,看是否过了冷却时间,如果过了冷却,那就按当前技能res++。如果没过当前技能,就等到这次可以按的时间。res = map.get(i);
3 用map记录按当前技能下一个最早能按时间为res + 冷却时间 + 1。
public int askForCoolingTime(int[] arr, int n) {
Map<Integer, Integer> map = new HashMap<>();
int res = 0;
for (int i : arr) {
if (!map.containsKey(i)) {
res++;
} else {
if (res + 1 >= map.get(i)) {
res++;
} else {
res = map.get(i);
}
}
map.put(i, res + n + 1);
}
return res;
}