网站首页 > 文章精选 正文
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。
解决步骤
- 1. 初始化:
- o 第一个按钮的按下时间就是它的时间戳 events[0][1],因此初始时最长按下时间的按钮编号是 events[0][0],最长按下时间是 events[0][1]。
- 2. 遍历后续按钮:
- o 从第二个按钮开始(i = 1 到 i = len(events) - 1),计算当前按钮的按下时间:
- o 当前按钮的按下时间 = 当前按钮的时间戳 events[i][1] - 前一个按钮的时间戳 events[i-1][1]。
- o 比较当前按钮的按下时间与已知的最大按下时间:
- o 如果当前按下时间大于最大按下时间,更新最大按下时间和对应的按钮编号。
- o 如果当前按下时间等于最大按下时间,且当前按钮编号小于已知的按钮编号,更新按钮编号(确保编号最小)。
- 3. 返回结果:
- o 遍历完成后,返回记录的最长按下时间对应的按钮编号。
复杂度分析
- o 时间复杂度:O(n),其中 n 是 events 的长度。我们只需要遍历一次 events 数组。
- o 额外空间复杂度: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-*-
defbutton_with_longest_time(events):
idx, max_diff = events[0][0], events[0][1]
for i inrange(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)
·
我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。
欢迎关注“福大规模架构师每日一题”,让 Go 语言和算法助力您的职业发展
·
猜你喜欢
- 2025-07-14 Go并发编程之WaitGroup(go语言 并发)
- 2025-07-14 golang企业微信告警(企业微信告警推送)
- 2025-07-14 2.8 Go语言中的for循环,break和continue
- 2025-07-14 Go语言Context包:最常用包之一的使用指南
- 2025-07-14 Go语言零到一:动态数组——切片(go语言的切片)
- 2025-07-14 2025-06-26:转换数组。用go语言,给你一个整数数组 nums,它被视
- 2025-07-14 go sync.Pool简介(go system)
- 2025-07-14 2025-07-13:统计特殊子序列的数目。用go语言,给定一个只包含正
- 2025-07-14 Go语言数据库编程:GORM 的基本使用
- 2025-07-14 2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)