https://leetcode.com/problems/slowest-key/
你幫一個新設計的鍵盤做測試,你按照keysPressed 的順序按下對應的按鍵,過程沒有休息的一個接著一個按;另一方面,releaseTimes 則自動記錄你每個按鍵放掉的時間點,同時也代表你下一個按鍵按下去的時間點。
測試完後,你看著releaseTimes,想知道你剛剛按哪個鍵按的最久,所以就自己寫一段程式做計算。
note:
同一個鍵在測試的時候可能不只按了一次
當按最久的按鍵不只一個時,回傳字母順序最大的那個
今天的題目是難度easy的題目,所以今天的解答就做得比較初學者向好了
首先,releaseTimes 代表著每個鍵放掉的時間,也代表下個鍵按下去的時間,因此我們可以得到持續時間duration 等於 releaseTimes[i+1] - releaseTimes[i];接著,我們用迴圈依序算出每個鍵的持續時間,當算出更大的持續時間的話,就把這項持續時間和對應的按鍵記起來。
不過在那之前,我們先在releaseTimes 的第一項插入0,代表一開始按下去的時間點,這樣比較方便計算。
我們有可能會遇到多個鍵同樣有最久的持續時間,這時候我們要比較誰的字母順序最大,有些程式語言可以直接用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
那就多多參考吧