未验证 提交 766bfa70 编写于 作者: K Keqi Huang 提交者: GitHub

Create 1013._Pairs_of_Songs_With_Total_Durations_Divisible_by_60.md

上级 ffe99484
# 1013. Pairs of Songs With Total Durations Divisible by 60
**<font color=red>难度: Easy</font>**
## 刷题内容
> 原题连接
* https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/
> 内容描述
```
In a list of songs, the i-th song has a duration of time[i] seconds.
Return the number of pairs of songs for which their total duration in seconds is divisible by 60. Formally, we want the number of indices i < j with (time[i] + time[j]) % 60 == 0.
Example 1:
Input: [30,20,150,100,40]
Output: 3
Explanation: Three pairs have a total duration divisible by 60:
(time[0] = 30, time[2] = 150): total duration 180
(time[1] = 20, time[3] = 100): total duration 120
(time[1] = 20, time[4] = 40): total duration 60
Example 2:
Input: [60,60,60]
Output: 3
Explanation: All three pairs have a total duration of 120, which is divisible by 60.
Note:
1 <= time.length <= 60000
1 <= time[i] <= 500
```
## 解题方案
> 思路 1
******- 时间复杂度: O(N^2)******- 空间复杂度: O(1)******
先算出每种数字出现的次数
然后取出2个数字看即可
1. 两个数字不同
2. 两个数字相同(但是必须保证这种数字出现至少2次)
```python
class Solution:
def numPairsDivisibleBy60(self, time):
s = collections.Counter(time)
uni_time = list(s.keys())
res = 0
for i in range(len(uni_time)): # 两个数字不同
for j in range(i+1, len(uni_time)):
if (uni_time[i] + uni_time[j]) % 60 == 0:
res += s[uni_time[i]] * s[uni_time[j]]
for i in range(len(uni_time)): # 两个数字相同
if (uni_time[i] + uni_time[i]) % 60 == 0:
cnt = s[uni_time[i]]
if s[uni_time[i]] >= 2: # 但是必须保证这种数字出现至少2次
res += self.permu(cnt) // (self.permu(2) * self.permu(cnt-2))
return res
def permu(self, cnt):
res = 1
for i in range(1, cnt+1):
res *= i
return res
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册