📅  最后修改于: 2023-12-03 15:34:33.841000             🧑  作者: Mango
这是一个关于时钟的问题,在一个模拟的时钟应用中,你需要实现一个函数用于计算两个时钟之间的最小时间差。时钟的表示方式是'hh:mm',例如'05:30'表示早上5:30。函数返回的时间差应该是以分钟为单位的正整数。
def min_time_diff(time_list: List[str]) -> int:
pass
参数 time_list
是一个字符串列表,包含 n (2 <= n <= 2 * 10^4)
个时钟的时间,每个时间的格式都是 hh:mm (00 <= hh <= 23, 00 <= mm <= 59)
。
返回一个整数,表示输入的时钟中,最小的时间差(以分钟为单位)。
输入:
["05:31", "22:08", "00:00", "12:08", "15:19"]
输出:
93
n
个时间转化为分钟数,存入数组 times
中;times
进行排序,使其按照时间从小到大排列;from typing import List
def min_time_diff(time_list: List[str]) -> int:
times = []
for t in time_list:
h, m = t.split(':')
n = int(h) * 60 + int(m)
times.append(n)
times.sort()
n = len(times)
res = float('inf')
for i in range(n):
diff = (times[(i+1) % n] - times[i]) % (24*60)
if diff == 0:
return 0
res = min(res, diff)
return res
本算法需要进行排序,时间复杂度为 O(n log n)
。计算最小时钟时间差的过程中,每个时间最多被访问两次,时间复杂度为 O(n)
。因此,总的时间复杂度为 O(n log n)
。
空间复杂度为 O(n)
,因为需要新开数组将 n
个时间转化为分钟数暂存。