
2025-06-30:按下时间最长的按钮。用go语言,你给了我一个二维数组 events,里面每个元素 events[i] = [按钮编号, 按下时间],代表在某个时刻按下了哪个按钮。
数组按时间从小到大排列。
每个按钮按下所花费的时间,等于当前按下时刻和上一次按下的时间差;第一个按钮按下的耗时就是它的时间戳本身。
你需要找出耗时最长的按钮编号。如果有多个按钮耗时相同,返回编号最小的那个。
1 <= events.length <= 1000。
events[i] == [indexi, timei]。
1 <= indexi, timei <= 100000。
输入保证数组 events 按照 timei 的递增顺序排序。
输入: events = [[10,5],[1,7]]。
输出: 10。
解释:
下标为 10 的按钮在时间 5 被按下。
下标为 1 的按钮在时间 7 被按下,因此按下时间为 7 - 5 = 2。
最终,下标为 10 的按钮按下时间最长,为 5。
题目来自力扣3386。
events[0][1],因此初始时最长按下时间的按钮编号是 events[0][0],最长按下时间是 events[0][1]。i = 1 到 i = len(events) - 1),计算当前按钮的按下时间:events[i][1] - 前一个按钮的时间戳 events[i-1][1]。O(n),其中 n 是 events 的长度。我们只需要遍历一次 events 数组。O(1),只使用了常数级别的额外空间(如 idx 和 maxDiff 变量)。.
package main
import (
"fmt"
)
func buttonWithLongestTime(events [][]int)int {
idx, maxDiff := events[][], events[][]
for i := ; i < len(events); i++ {
p, q := events[i-1], events[i]
d := q[] - p[]
if d > maxDiff || d == maxDiff && q[] < idx {
idx, maxDiff = q[], d
}
}
return idx
}
func main() {
events := [][]int{{, }, {, }}
result := buttonWithLongestTime(events)
fmt.Println(result)
}
.
# -*-coding:utf-8-*-
defbutton_with_longest_time(events):
idx, max_diff = events[][], events[][]
for i inrange(, len(events)):
p, q = events[i-], events[i]
d = q[] - p[]
if d > max_diff or (d == max_diff and q[] < idx):
idx, max_diff = q[], d
return idx
if __name__ == "__main__":
events = [[, ], [, ]]
result = button_with_longest_time(events)
print(result)