iT邦幫忙

2021 iThome 鐵人賽

DAY 6
1
自我挑戰組

每日LeetCode解題紀錄系列 第 6

LeetCode解題 Day06

  • 分享至 

  • xImage
  •  

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


上一篇
LeetCode解題 Day05
下一篇
LeetCode解題 Day07
系列文
每日LeetCode解題紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言