首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2025-06-30:按下时间最长的按钮。用go语言,你给了我一个二维数组 events,里面每个元素 events[i] =

2025-06-30:按下时间最长的按钮。用go语言,你给了我一个二维数组 events,里面每个元素 events[i] =

作者头像
福大大架构师每日一题
发布2025-06-30 08:50:00
发布2025-06-30 08:50:00
1590
举报

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. 1. 初始化
    • • 第一个按钮的按下时间就是它的时间戳 events[0][1],因此初始时最长按下时间的按钮编号是 events[0][0],最长按下时间是 events[0][1]
  2. 2. 遍历后续按钮
    • • 从第二个按钮开始(i = 1 到 i = len(events) - 1),计算当前按钮的按下时间:
      • • 当前按钮的按下时间 = 当前按钮的时间戳 events[i][1] - 前一个按钮的时间戳 events[i-1][1]
    • • 比较当前按钮的按下时间与已知的最大按下时间:
      • • 如果当前按下时间大于最大按下时间,更新最大按下时间和对应的按钮编号。
      • • 如果当前按下时间等于最大按下时间,且当前按钮编号小于已知的按钮编号,更新按钮编号(确保编号最小)。
  3. 3. 返回结果
    • • 遍历完成后,返回记录的最长按下时间对应的按钮编号。

复杂度分析

  • • 时间复杂度O(n),其中 n 是 events 的长度。我们只需要遍历一次 events 数组。
  • • 额外空间复杂度O(1),只使用了常数级别的额外空间(如 idx 和 maxDiff 变量)。

Go完整代码如下:

.

代码语言:javascript
复制
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)
}

Python完整代码如下:

.

代码语言:javascript
复制
# -*-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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决步骤
  • 复杂度分析
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档