LeetCode题解(1010):总持续时间可被60整除的歌曲(Python)
发布日期:2021-06-29 19:55:11
浏览次数:4
分类:技术文章
本文共 1176 字,大约阅读时间需要 3 分钟。
题目:(简单)
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( N 2 ) O(N^2) O(N2) | O ( 1 ) O(1) O(1) | 超出时间限制 |
Ans 2 (Python) | O ( N 2 ) O(N^2) O(N2) | O ( N ) O(N) O(N) | 超出时间限制 |
Ans 3 (Python) | O ( N ) O(N) O(N) | O ( 1 ) O(1) O(1) | 264ms (92.32%) |
LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。
解法一(暴力方法,直接枚举求余):
def numPairsDivisibleBy60(self, time: List[int]) -> int: ans = 0 for pair in itertools.combinations(time, 2): if (pair[0] + pair[1]) % 60 == 0: ans += 1 return ans
解法二(更好的暴力,先求余再枚举):
def numPairsDivisibleBy60(self, time: List[int]) -> int: time = [t % 60 for t in time] ans = 0 for pair in itertools.combinations(time, 2): remainder = pair[0] + pair[1] if remainder == 0 or remainder == 60: ans += 1 return ans
解法三:
def numPairsDivisibleBy60(self, time: List[int]) -> int: count = collections.Counter([t % 60 for t in time]) ans = 0 if 0 in count: n = count[0] ans += n * (n - 1) / 2 if 30 in count: n = count[30] ans += n * (n - 1) / 2 for k, v in count.items(): if k < 30 and 60 - k in count: n = count[60 - k] ans += v * n return int(ans)
转载地址:https://dataartist.blog.csdn.net/article/details/107098737 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月23日 14时35分51秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JS判断 array 类型
2019-04-30
map与forEach的区别
2019-04-30
箭头函数与普通函数的区别
2019-04-30
JS 数组和对象的遍历⽅式,以及⼏种⽅式的⽐较
2019-04-30
JS 事件的各个阶段
2019-04-30
快速的让⼀个数组乱序
2019-04-30
细说 javascript 的 parseInt()函数
2019-04-30
渲染几万条数据并不卡住界面
2019-04-30
获取到页⾯中所有的checkbox怎么做?
2019-04-30
添加、移除、移动、复制、创建和查找节点
2019-04-30
Javascript中callee和caller的作用
2019-04-30
javascript 数组去重
2019-04-30
JAVA 基本语法
2019-04-30
Java 标识符
2019-04-30
Java JDK中几个经典的版本
2019-04-30
Java 注释
2019-04-30
Java JDK 1.5后的变量声明与赋值支持
2019-04-30
Java 整型
2019-04-30
Java 整型数据溢出探索 计算结果值
2019-04-30
Java 浮点型
2019-04-30