1. 问题描述:
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = ["23:59","00:00"]
输出:1
示例 2:
输入:timePoints = ["00:00","23:59","00:00"]
输出:0
提示:
2 <= timePoints <= 2 * 10 ^ 4
timePoints[i] 格式为 "HH:MM"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-difference
2. 思路分析:
我们可以先对数组排序(一般答案没有顺序要求的我们可以考虑先对数组排序,数组有序之后那么会更好处理),数组排序之后那么最短的时间肯定是在所有相邻的两个时间的差值中取到的,所以我们可以先计算出数组排序之后相邻两个元素的差值取一个最小值,这里需要注意一个特殊情况是一开始的时间与结束的时间也可能会更短,给出的数组相当于是环形数组,所以我们需要特判一下开始时间与结束时间的差值取一个最小值即可。
3. 代码如下:
from typing import List
class Solution:
def findMinDifference(self, timePoints: List[str]) -> int:
q = list()
for s in timePoints:
t = s.split(":")
# 将时间转化为分钟会比较好处理
q.append(int(t[0]) * 60 + int(t[1]))
q.sort()
res = 10 ** 8
n = len(q)
# 计算相邻两个时间的差值
for i in range(1, n):
res = min(res, q[i] - q[i - 1])
# 特判一下开始时间与结束时间
return min(res, 24 * 60 - q[-1] + q[0])