leetcode(力扣) 539. 最小时间差 (模拟时间)
原创
©著作权归作者所有:来自51CTO博客作者深度不学习的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
题目描述
给定一个 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