按键持续时间最长的键
难度:
标签:
题目描述
代码结果
运行时间: 24 ms, 内存: 16.1 MB
/*
* 思路:
* 1. 使用Stream API计算每次按键的持续时间。
* 2. 将每次按键的持续时间与对应的按键字母组合成一个Pair对象。
* 3. 使用max操作找到持续时间最长的按键,如果有多个,选择字母顺序最大的那个。
*/
import java.util.*;
import java.util.stream.*;
public class Solution {
public char slowestKey(int[] releaseTimes, String keysPressed) {
return IntStream.range(0, releaseTimes.length)
.mapToObj(i -> new AbstractMap.SimpleEntry<>(releaseTimes[i] - (i == 0 ? 0 : releaseTimes[i - 1]), keysPressed.charAt(i)))
.max(Comparator.<AbstractMap.SimpleEntry<Integer, Character>>comparingInt(Map.Entry::getKey)
.thenComparing(Map.Entry::getValue))
.get().getValue();
}
}
解释
方法:
该题解采用遍历的方式。首先初始化最长持续时间 max_duration 和对应的按键 max_key 为第一个按键的持续时间和按键。然后从第二个按键开始遍历,计算每个按键的持续时间,并与当前的最长持续时间进行比较。如果当前按键的持续时间更长,或者持续时间相同但按键字母顺序更大,则更新 max_duration 和 max_key。最后返回持续时间最长的按键。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
如果`releaseTimes`数组中存在负数或者非递增的情况,此算法还能正确运行吗?
▷🦆
当`keysPressed`字符串为空或`releaseTimes`数组为空时,这个算法应该如何处理?
▷🦆
为什么算法在遍历`releaseTimes`数组时从索引1开始而不是0?
▷🦆
算法中有没有可能出现`releaseTimes[i]`和`releaseTimes[i-1]`相等的情况,这会影响结果吗?
▷