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

举报
福大大架构师每日一题 发表于 2025/06/30 08:03:03 2025/06/30
【摘要】 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。

解决步骤

  1. 初始化

    • 第一个按钮的按下时间就是它的时间戳 events[0][1],因此初始时最长按下时间的按钮编号是 events[0][0],最长按下时间是 events[0][1]
  2. 遍历后续按钮

    • 从第二个按钮开始(i = 1i = len(events) - 1),计算当前按钮的按下时间:
      • 当前按钮的按下时间 = 当前按钮的时间戳 events[i][1] - 前一个按钮的时间戳 events[i-1][1]
    • 比较当前按钮的按下时间与已知的最大按下时间:
      • 如果当前按下时间大于最大按下时间,更新最大按下时间和对应的按钮编号。
      • 如果当前按下时间等于最大按下时间,且当前按钮编号小于已知的按钮编号,更新按钮编号(确保编号最小)。
  3. 返回结果

    • 遍历完成后,返回记录的最长按下时间对应的按钮编号。

复杂度分析

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

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。