1010.总持续时间可被 60 整除的歌曲
【LetMeFly】1010.总持续时间可被 60 整除的歌曲
力扣题目链接:https://leetcode.cn/problems/pairs-of-songs-with-total-durations-divisible-by-60/
在歌曲列表中,第 i
首歌曲的持续时间为 time[i]
秒。
返回其总持续时间(以秒为单位)可被 60
整除的歌曲对的数量。形式上,我们希望下标数字 i
和 j
满足 i < j
且有 (time[i] + time[j]) % 60 == 0
。
示例 1:
输入:time = [30,20,150,100,40] 输出:3 解释:这三对的总持续时间可被 60 整除: (time[0] = 30, time[2] = 150): 总持续时间 180 (time[1] = 20, time[3] = 100): 总持续时间 120 (time[1] = 20, time[4] = 40): 总持续时间 60
示例 2:
输入:time = [60,60,60] 输出:3 解释:所有三对的总持续时间都是 120,可以被 60 整除。
提示:
1 <= time.length <= 6 * 104
1 <= time[i] <= 500
方法一:取模 + 计数
题目意思是两个数之和是60的整数倍。那么其实我们只需要关系两个数对60取模的余数即可,至于这个数是60的多少倍并不重要。
因此我们可以开辟一个大小为60的整型数组$bin$,数组中每个元素的初始值都是0。$bin[i]$用来记录遍历到当前为止,余数为$i$的歌曲的个数
这样,在遍历过程中,假如当前歌曲时长对60的余数是$j$,那么其需要和$(60-j)%60$组成60的倍数。(这里60-j之和再对60取模主要是为了处理特殊情况:60倍数+60倍数还是60倍数,$0+0=0$)
因此,每次遍历到一首(时长对60取模是j的)歌曲,只需要加上$bin[(60-j)%60]$即可
- 时间复杂度$O(len(time))$
- 空间复杂度$O(C)$,其中$C=60$
AC代码
C++
1 |
|
Python
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/130544996
1010.总持续时间可被 60 整除的歌曲
https://blog.letmefly.xyz/2023/05/07/LeetCode 1010.总持续时间可被60整除的歌曲/