算法二十天
第八天
总持续时间可以被60整除的歌曲 中等
给定一个数组,求其中两项和为60的倍数的组合数
输入: time={20,30,150,30,30,60,90};
输出:10
很简单的一道题,首先对所有的数对60取余,就得到一组不大于60的数这是建立一个map[60],记录每种余数的个数,然后排列组合即可
#include<bits/stdc++.h>
using namespace std;
int numPairsDivisibleBy60(vector<int>& time) {
long long map[60]={
0};
long long ans=0;//可能会超出int的范围
for(auto &i:time)
map[i%60]++;
for(int i=1;i<30;i++)
{
ans+=map[i]*map[60-i];
}
ans+=(map[0]-1+1)*(map[0]-1)/2;//因为题目要求时间是大于0的所以可以这样判断;
ans+=(map[30]-1+1)*(map[30]-1)/2;
return ans;
}
int main()
{
vector<int> time={
20,30,150,30,30,60,90};
cout<<numPairsDivisibleBy60(time);
}
代码要写的干净整齐