leetcode(力扣) 539. 最小时间差 (模拟时间)

题目描述

给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。

示例 1:
输入:timePoints = [“23:59”,“00:00”]
输出:1

示例 2:
输入:timePoints = [“00:00”,“23:59”,“00:00”]
输出:0

思路分析

题目还算清晰,要求返回分钟。
直接排序, 然后两两之间算时间差值,保存最小的就行。别忘了算最后一个和第一个的差值。
这里有个注意的地方就是,两两之间的时间差值要正反都算一边。
比如 [“00:00”,"23:59] 这两个,如果从0点走到23.59 则需要 23*60+59分钟,如果从23.59走到0点 则只需要一分钟。
也就是说这道题里没有今天明天昨天的概念。
所以给了两个时间 A和B, 我们要看从A走到B和 从B走到A那个小就取那个。

这道题代码提交了得有7.8次了,改的比较乱。。

完整代码

class Solution:
    def findMinDifference(self, timePoints: List[str]) -> int:
        def deal_time(timePoints,a,b,res): # 用于计算 A和B时间之间的最小插值
            q = timePoints[a].split(':')
            qh =timePoints[b].split(':')
            q = int(q[0])* 60+int(q[1])
            qh = int(qh[0])* 60+int(qh[1])
            res = min(res,qh-q,abs(1440-(qh-q)))
            return res
        if len(timePoints)!=len(set(timePoints)): # 所给时间中有重复时间 返回0
            return 0
        timePoints.sort()
        print(timePoints)
        res = float('inf')
        end = 2360
        # 计算两个时间之间的差值
        for i in range(len(timePoints)-1):
            # 将当前时间变成四位数的整型变量用来相减
            res = deal_time(timePoints,i,i+1,res)
        # 处理最后一个时间  ---最后一个时间和第一个时间的差值
        res = deal_time(timePoints,0,-1,res)
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值