总持续时间可以被60整除的歌曲 中等

算法二十天

第八天

总持续时间可以被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);
}

代码要写的干净整齐

猜你喜欢

转载自blog.csdn.net/BeiWoFW/article/details/124237659