📌  相关文章
📜  QA – 安置测验|时钟时钟时钟|问题 9(1)

📅  最后修改于: 2023-12-03 15:34:33.841000             🧑  作者: Mango

QA – 安置测验|时钟时钟时钟|问题 9

介绍

这是一个关于时钟的问题,在一个模拟的时钟应用中,你需要实现一个函数用于计算两个时钟之间的最小时间差。时钟的表示方式是'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
实现思路
  1. 将这 n 个时间转化为分钟数,存入数组 times中;
  2. times 进行排序,使其按照时间从小到大排列;
  3. 计算相邻两个时间的时间差,找出其中最小的一个,即为最小的时间差。
代码实现
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 个时间转化为分钟数暂存。