LeetCode解题 Day06

1629. Slowest Key

https://leetcode.com/problems/slowest-key/


题目解释

你帮一个新设计的键盘做测试,你按照keysPressed 的顺序按下对应的按键,过程没有休息的一个接着一个按;另一方面,releaseTimes 则自动记录你每个按键放掉的时间点,同时也代表你下一个按键按下去的时间点。

测试完後,你看着releaseTimes,想知道你刚刚按哪个键按的最久,所以就自己写一段程序做计算。

note:
同一个键在测试的时候可能不只按了一次

当按最久的按键不只一个时,回传字母顺序最大的那个

Example

https://i.imgur.com/RgIYV8F.png


解法:

今天的题目是难度easy的题目,所以今天的解答就做得比较初学者向好了

  1. 首先,releaseTimes 代表着每个键放掉的时间,也代表下个键按下去的时间,因此我们可以得到持续时间duration 等於 releaseTimes[i+1] - releaseTimes[i];接着,我们用回圈依序算出每个键的持续时间,当算出更大的持续时间的话,就把这项持续时间和对应的按键记起来。

    不过在那之前,我们先在releaseTimes 的第一项插入0,代表一开始按下去的时间点,这样比较方便计算。

  2. 我们有可能会遇到多个键同样有最久的持续时间,这时候我们要比较谁的字母顺序最大,有些程序语言可以直接用max() 比较出大小,如果没有的话就把字母转成ASCII比较大小。

程序码

class Solution:
    def slowestKey(self, releaseTimes: List[int], keysPressed: str) -> str:
        
        key = keysPressed[0]
        duration = releaseTimes[0]
        releaseTimes = [0] + releaseTimes
        
        for i in range(len(keysPressed)):
            if releaseTimes[i+1] - releaseTimes[i] > duration:
                duration = releaseTimes[i+1] - releaseTimes[i]
                key = keysPressed[i]
                
            elif releaseTimes[i+1] - releaseTimes[i] == duration:
                key = max(key, keysPressed[i])
                
            else:
                pass
            
            
        return key

挑战一行程序码

class Solution:
    def slowestKey(self, releaseTimes: List[int], keysPressed: str) -> str:
            
        return max((d2 - d1, key) for key, d1, d2 in zip(keysPressed, [0] + releaseTimes, releaseTimes))[1]

闲聊

今天的题目很简单,反而看题目叙述会比较累

这篇再发文前看到有人的铁人赛主题同样也是 Sep LeetCoding Challenge

那就多多参考吧/images/emoticon/emoticon33.gif


<<:  6.移转 Aras PLM大小事-Agile 汇出 File

>>:  Day 6 | 讯息提示元件

Day 11 Arbitrary attributes

目前MyButton有3个[Parameter],如果再增加的话,又要再定义新的[Parameter...

Day 06 | 资料绑定(二) - 计算属性 Computed

延续昨天的内容,在昨天理解完 mount() 後,今天就开始来对资料进行操作吧!! 资料绑定 如果用...

Day 4 图片加文字

图片加文字 教学原文参考:图片加文字 这篇文章会介绍如何透过 GIMP,使用选取工具和文字工具,开启...

【Debug】PHP Key-Value 输入格式错误

Key-value 版本兼容警告 如果key不加引号 $data=[ john1=>1.2, ...

[Day14] Android - Kotlin笔记:LiveData在fragment重建时会重新呼叫两次的解决方法

原因: 在Activity中绑定一个ViewModel, Fragments间共用这个ViewMod...