跳转至

LeetCode: 1010. 总持续时间可被 60 整除的歌曲

1、题目描述

在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。

返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字 i < j 且有 (time[i] + time[j]) % 60 == 0

示例 1:
输入:[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:
输入:[60,60,60]
输出:3
解释:所有三对的总持续时间都是 120,可以被 60 整数。

提示:

  • 1 <= time.length <= 60000

  • 1 <= time[i] <= 500

2、解题思路

  • 因为时间被60整除,那么我们来统计一下余数是0-59的数字的数量
  • 设置缓存数组,统计余数是0-59的数字数量
  • 每遇到一个数字,找出能使余数相加被60整除的数,这些即为组合方案数量
class Solution:
    def numPairsDivisibleBy60(self, time: List[int]) -> int:
        mod = [0] * 61
        count = 0
        for i in time:
            temp = i % 60
            count += mod[(60 - temp) % 60]
            mod[temp] += 1
        return count