LeetCode题解(0539):最小时间差(Python)
发布日期:2021-06-29 19:57:57 浏览次数:2 分类:技术文章

本文共 1231 字,大约阅读时间需要 4 分钟。

题目:(中等)

标签:字符串

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N l o g N ) O(NlogN) O(NlogN) O ( N ) O(N) O(N) 92ms (59.70%)
Ans 2 (Python) O ( N l o g N ) O(NlogN) O(NlogN) O ( N ) O(N) O(N) 68ms (98.48%)
Ans 3 (Python)

LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。

解法一(排序法):

class Solution:    def findMinDifference(self, timePoints: List[str]) -> int:        # 生成用分钟表示的时间        lst = []        for time in timePoints:            hour, minute = time.split(":")            lst.append(int(hour) * 60 + int(minute))        # 排序时间列表        lst.sort()        # 计算最小时间差        ans = lst[0] + 1440 - lst[-1]  # 首尾相差一天的最小值        for i in range(len(lst) - 1):            ans = min(ans, lst[i + 1] - lst[i])        return ans

解法二(优化解法一):

不再使用“:”分隔小时、分钟而直接使用切片器分隔

使用集合直接处理重复值

class Solution:    def findMinDifference(self, timePoints: List[str]) -> int:        # 生成用分钟表示的时间        lst = set()        for time in timePoints:            minute = int(time[:2]) * 60 + int(time[3:])            if minute in lst:                return 0            lst.add(minute)        # 排序时间列表        lst = sorted(lst)        # 考虑跨午夜的情况        lst.append(lst[0] + 1440)        # 计算最小时间差        return min(lst[i + 1] - lst[i] for i in range(len(lst) - 1))

转载地址:https://dataartist.blog.csdn.net/article/details/108009706 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode题解(0553):在连续除法中添加括号使结果最大(Python)
下一篇:LeetCode题解(0537):字符串表示的复数乘法(Python)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月25日 17时02分15秒