一、总持续时间可被 60 整除的歌曲
思路
这题用暴力的话就是直接就时间超限了,所以用官方的思路就是用组合数学
我们知道一个数除以一个数,会有余数,当一个余数和另一个余数加上等于6的时候,那么这时候这俩个数就可以被60整除了,要注意的是余数为0的时候,另一个数也要是余数为0
附赠大佬的图片
代码实现
int numPairsDivisibleBy60(int* time, int timeSize) {
int cnt[60];
memset(cnt, 0, sizeof(cnt));
for (int i = 0; i < timeSize; i++) {
cnt[time[i] % 60]++;
}
long long res = 0;
res += (long long)cnt[0] * (cnt[0] - 1) / 2 + (long long)cnt[30] * (cnt[30] - 1) / 2;
for (int i = 1; i < 30; i++) {
res += cnt[i] * cnt[60 - i];
}
return (int)res;
}