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
广告