Python 中求总时长可被 60 整除的歌曲对


假设我们有一个歌曲列表,第 i 首歌曲的时长为 time[i] 秒。我们需要找到歌曲对的数量,使得它们的总时长(以秒为单位)可以被 60 整除。

因此,如果 time 数组为 [30, 20, 150, 100, 40],则答案为 3。三对将是 (3, 150)、(20, 100)、(20, 40),在所有情况下,总时长都可以被 60 整除。

为了解决这个问题,我们将遵循以下步骤:

  • 创建一个名为 rem 的映射来存储余数。设置 ans := 0
  • 对于 time 中的所有元素 i:
    • 如果 i 可以被 0 整除且 0 在 rem 中,则 ans := ans + rem[0]
    • 否则,如果 60 – (i mod 60) 在 rem 中,则 ans := ans + rem[60 – (i mod 60)]
    • 如果 i mod 60 在 rem 中,则 rem[i mod 60] := rem[i mod 60] + 1
    • 否则 rem[i mod 60] := 1
  • 返回 ans

示例

让我们看看下面的实现,以便更好地理解:

 在线演示

class Solution(object):
   def numPairsDivisibleBy60(self, time):
      ans = 0
      remainder = {}
      for i in time:
         if i % 60 == 0 and 0 in remainder:
            ans += remainder[0]
         elif 60 - (i%60) in remainder:
            ans += remainder[60 - (i%60)]
         if i % 60 in remainder:
            remainder[i%60]+=1
         else:
            remainder[i%60]=1
      return ans
ob1 = Solution()
print(ob1.numPairsDivisibleBy60([30,20,150,100,40]))

输入

[30,20,150,100,40]

输出

3

更新于: 2020年4月28日

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告