2025-06-30:按下时间最长的按钮。用go语言,你给了我一个二维数组 events,里面每个元素 events[i] =
【摘要】 2025-06-30:按下时间最长的按钮。用go语言,你给了我一个二维数组 events,里面每个元素 events[i] = [按钮编号, 按下时间],代表在某个时刻按下了哪个按钮。数组按时间从小到大排列。每个按钮按下所花费的时间,等于当前按下时刻和上一次按下的时间差;第一个按钮按下的耗时就是它的时间戳本身。你需要找出耗时最长的按钮编号。如果有多个按钮耗时相同,返回编号最小的那个。1 <=...
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变量)。
Go完整代码如下:
.
package main
import (
"fmt"
)
func buttonWithLongestTime(events [][]int) int {
idx, maxDiff := events[0][0], events[0][1]
for i := 1; i < len(events); i++ {
p, q := events[i-1], events[i]
d := q[1] - p[1]
if d > maxDiff || d == maxDiff && q[0] < idx {
idx, maxDiff = q[0], d
}
}
return idx
}
func main() {
events := [][]int{{10, 5}, {1, 7}}
result := buttonWithLongestTime(events)
fmt.Println(result)
}

Python完整代码如下:
.
# -*-coding:utf-8-*-
def button_with_longest_time(events):
idx, max_diff = events[0][0], events[0][1]
for i in range(1, len(events)):
p, q = events[i-1], events[i]
d = q[1] - p[1]
if d > max_diff or (d == max_diff and q[0] < idx):
idx, max_diff = q[0], d
return idx
if __name__ == "__main__":
events = [[10, 5], [1, 7]]
result = button_with_longest_time(events)
print(result)

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)