专栏《LeetCode|一刷到底》
打卡每天leetcode精选每日一题(尽量不断更!)

点击关注不迷路!!!

一、题目描述

  • 题目:最小时间差
  • 难度:中等
  • 地址:​​《最小时间差》​
  • 描述:给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
  • 示例1

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

  • 示例2

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

提示:

  • 2 <= timePoints.length <= 2 * Python|Leetcode《539》|最小时间差_leetcode
  • timePoints[i] 格式为 “HH:MM”

二、题目解析

本题考查我们得到任意两个时间中最小的差值,并以分钟数来进行表示。
对于这种寻找差值的题目,我们一般的思路就是进行排序并且计算每两个数值之间的差值寻找最小的那一个,本题的思路依旧如此,但是需要注意一下其中的一些关键点。

  1. ​循环计算​​​:循环计算指的是我们需要多进行一次计算,此次计算算的是时间列表末尾的时间和开始的时间的差值,例如有排序后的序列​​['00:00','01:00','23:00]​​​,不能忘记计算​​23:00​​​和​​00:00​​的差值。
  2. ​分钟计算​​:小时*60+分钟
  3. ​分钟化简​​:24小时为1440分钟,但是任意两个时间的差值都应该在720分钟也就是12小时之内,因此计算的时间差大于720分钟的差值我们应该用1440减去该时间作为结果。

三、解题代码

解法

class Solution:
def findMinDifference(self, timePoints: List[str]) -> int:
# 排序
timePoints.sort()
n = len(timePoints)
res = float('inf')
for i in range(n):
# 计算时间差
dif = abs((int(timePoints[i][:2]) * 60 + int(timePoints[i][3:])) - (int(timePoints[i - 1][:2]) * 60 + int(timePoints[i - 1][3:])))
# 时间化简
if dif > 720:
dif = 1440 - dif
# 取每次的最小值
if dif < res:
res = dif
return res