总持续时间可被 60 整除的歌曲【LC1010】
在歌曲列表中,第
i首歌曲的持续时间为time[i]秒。返回其总持续时间(以秒为单位)可被
60整除的歌曲对的数量。形式上,我们希望下标数字i和j满足i < j且有(time[i] + time[j]) % 60 == 0。
-
思路
由于需要求两首歌的总时间可被60整除的对数,那么此时一定满足time[i]%60+time[j]%60=60time[i]\%60 + time[j] \% 60 = 60time[i]%60+time[j]%60=60,因此需要使用哈希表记录每首歌对60的余数及其出现次数。
-
实现
class Solution { public int numPairsDivisibleBy60(int[] time) { int[] count = new int[60]; int res = 0; for (int i = 0; i < time.length; i++){ time[i] %= 60; res += count[(60 - time[i]) % 60]; count[time[i]]++; } return res; } }- 复杂度
- 时间复杂度:O(n)O(n)O(n)
- 空间复杂度:O(C)O(C)O(C)
- 复杂度

该问题要求计算列表中两首歌曲总时间能被60整除的对数。解决方案是利用哈希表存储每首歌时间对60的余数及出现次数,然后对于每个时间i,增加(60-i)%60的计数到结果中。时间复杂度为O(n),空间复杂度为O(C),其中C是不同余数值的种类。
6743

被折叠的 条评论
为什么被折叠?



