跳转至

2022/01/09 - 1629. 按键持续时间最长的键

1629. 按键持续时间最长的键 - Easy

今天的题是一道简单题,模拟按键时间,很简单。

Description

1629. 按键持续时间最长的键

LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。

给你一个长度为n的字符串keysPressed,其中 keysPressed[i] 表示测试序列中第i个被按下的键。releaseTimes是一个升序排列的列表,其中releaseTimes[i]表示松开第i个键的时间。字符串和数组的下标都从 0 开始。第0个键在时间为0时被按下,接下来每个键都 恰好 在前一个键松开时被按下。

测试人员想要找出按键 持续时间最长 的键。第i次按键的持续时间为releaseTimes[i] - releaseTimes[i - 1],第0次按键的持续时间为releaseTimes[0]

注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。

请返回按键持续时间最长的键,如果有多个这样的键,则返回按字母顺序排列最大的那个键。

Solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    public char slowestKey(int[] releaseTimes, String keysPressed) {
        PriorityQueue<Helper> q = new PriorityQueue<>((h1, h2) -> h2.releaseTime - h1.releaseTime == 0 ? h2.ch - h1.ch : h2.releaseTime - h1.releaseTime);
        int n = releaseTimes.length;
        assert n > 0;
        for (int i = 0; i < n; i++) {
            q.add(new Helper(keysPressed.charAt(i), i > 0 ? releaseTimes[i] - releaseTimes[i - 1] : releaseTimes[i]));
        }
        return q.poll().ch;
    } 

    static class Helper {
        char ch;
        int releaseTime;

        public Helper(char ch, int releaseTime) {
            this.ch = ch;
            this.releaseTime = releaseTime;
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution {
    public char slowestKey(int[] releaseTimes, String keysPressed) {
        int idx = 0, max = releaseTimes[0];
        int n = releaseTimes.length;
        for (int i = 1; i < n; i++) {
            int rt = releaseTimes[i] - releaseTimes[i - 1];
            char c = keysPressed.charAt(i);
            if (rt > max) {
                idx = i;
                max = rt;
            } else if (rt == max && c > keysPressed.charAt(idx)) {
                idx = i;
            }
        }
        return keysPressed.charAt(idx);
    }
}

评论

回到页面顶部