weekly contest 428。
從 Q1 的題目就很讓人迷惑,寫得不開心。

題目

輸入二維整數陣列 events,代表一個小孩按下鍵盤的時間。

每個 events[i] = [index i, time i] 代表在時間 time i 按下按鍵 index i

  • events 按照 time 遞增排序。
  • 按下按鍵的耗時是兩次連續按下事件的時間差
    第一次按鍵的所需時間即為該時間戳。

耗時最長的按鍵編號。
若有多個耗時相同,則回傳編號最小者。

解法

這題意不太好懂,還看看測資怎麼搞才知道連續指的應該是兩次相鄰事件
有人以為是同一顆按鍵按下兩次間的時間差,那就錯了。

順代一提,原文要求答案是:

button with the smallest index

千萬不要誤以為是 events 的 index。


每次按下,時間差為 times[i] - prev。
第一次按的耗時為 events[0][1],方便起見 prev 初始值為 0。

其餘按照題意模擬即可。

時間複雜度 O(N)。
空間複雜度 O(1)。

class Solution:
    def buttonWithLongestTime(self, events: List[List[int]]) -> int:
        ans = -1
        mx = -inf
        prev = 0
        for idx, time in events:
            diff = time - prev
            if diff > mx:
                mx = diff
                ans = idx
            elif diff == mx and idx < ans:
                ans = idx
                
            prev = time

        return ans