LeetCode 1010. 总持续时间可被 60 整除的歌曲
题目描述
思路分析
解法一:余数计数(推荐)
核心思路:
- 只关心每首歌时长对 60 的余数。
- 当前余数为 r,可配对的余数为 (60 - r) % 60。
- 统计已出现余数的数量,边扫描边累加配对数。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),固定 60 大小数组。
class Solution {
public int numPairsDivisibleBy60(int[] time) {
int[] cnt = new int[60];
int res = 0;
for (int t : time) {
int r = t % 60;
int need = (60 - r) % 60;
res += cnt[need];
cnt[r]++;
}
return res;
}
}
func numPairsDivisibleBy60(time []int) int {
cnt := make([]int, 60)
res := 0
for _, t := range time {
r := t % 60
need := (60 - r) % 60
res += cnt[need]
cnt[r]++
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 1. 两数之和 | 简单 | 哈希表 |
| 560. 和为 K 的子数组 | 中等 | 前缀和 |
| 523. 连续的子数组和 | 中等 | 余数 |
| 974. 和可被 K 整除的子数组 | 中等 | 余数 |
| 1010. 总持续时间可被 60 整除的歌曲 | 中等 | 余数统计 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!