Dart & Flutter 開發技巧 8-14
769
2025-04-12
1629. 按鍵持續時間最長的鍵
題源
https://leetcode-cn.com/problems/slowest-key/
題目
leetcode 設計了一款新式鍵盤,正在測試其可用性。測試人員將會點擊一系列鍵(總計 n 個),每次一個。
給你一個長度為 n 的字符串 keysPressed ,其中 keysPressed[i] 表示測試序列中第 i 個被按下的鍵。releaseTimes 是一個升序排列的列表,其中 releaseTimes[i] 表示松開第 i 個鍵的時間。字符串和數組的 下標都從 0 開始 。第 0 個鍵在時間為 0 時被按下,接下來每個鍵都 恰好 在前一個鍵松開時被按下。
測試人員想要找出按鍵 持續時間最長 的鍵。第 i 次按鍵的持續時間為 releaseTimes[i] - releaseTimes[i - 1] ,第 0 次按鍵的持續時間為 releaseTimes[0] 。
注意,測試期間,同一個鍵可以在不同時刻被多次按下,而每次的持續時間都可能不同。
請返回按鍵 持續時間最長 的鍵,如果有多個這樣的鍵,則返回 按字母順序排列最大 的那個鍵。
示例
示例 1:
輸入:releaseTimes = [9,29,49,50], keysPressed = "cbcd" 輸出:"c" 解釋:按鍵順序和持續時間如下: 按下 'c' ,持續時間 9(時間 0 按下,時間 9 松開) 按下 'b' ,持續時間 29 - 9 = 20(松開上一個鍵的時間 9 按下,時間 29 松開) 按下 'c' ,持續時間 49 - 29 = 20(松開上一個鍵的時間 29 按下,時間 49 松開) 按下 'd' ,持續時間 50 - 49 = 1(松開上一個鍵的時間 49 按下,時間 50 松開) 按鍵持續時間最長的鍵是 'b' 和 'c'(第二次按下時),持續時間都是 20 'c' 按字母順序排列比 'b' 大,所以答案是 'c'
1
2
3
4
5
6
7
8
9
示例 2:
輸入:releaseTimes = [12,23,36,46,62], keysPressed = "spuda" 輸出:"a" 解釋:按鍵順序和持續時間如下: 按下 's' ,持續時間 12 按下 'p' ,持續時間 23 - 12 = 11 按下 'u' ,持續時間 36 - 23 = 13 按下 'd' ,持續時間 46 - 36 = 10 按下 'a' ,持續時間 62 - 46 = 16 按鍵持續時間最長的鍵是 'a' ,持續時間 16
1
2
3
4
5
6
7
8
9
10
提示:
releaseTimes.length == n keysPressed.length == n 2 <= n <= 1000 1 <= releaseTimes[i] <= 109 releaseTimes[i] < releaseTimes[i+1] keysPressed 僅由小寫英文字母組成
1
2
3
4
5
6
思維導圖
主要思路:
新建一個名為times的vector數組來存放按鍵的持續時間
找到持續時間最長的那個按鍵即可得出結果
持續時間
if(i==0) //如果下標為0 times.emplace_back(releaseTimes[i]); else //如果下標不為0 times.emplace_back(releaseTimes[i]-releaseTimes[i-1]);
1
2
3
4
新建變量來存放最大值maxans和最大值所在的下標maxi
當maxans 當maxans == times[i]時,這個時候就需要比較那個按鍵和最大值下標的那個鍵的字典序誰大誰小了: 當keysPressed[maxi] 答案 class Solution { public: char slowestKey(vector 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。