[1010. 总持续时间可被 60 整除的歌曲](1010. 总持续时间可被 60 整除的歌曲)
-
有这样一个性质:
\[(a+b)\%c=0-->(a\%c+b\%c)\%c=0
\]
我们可以用map将每个数对应的取模结果还有个数存起来,这样i从[1,30) , \(map[i]*map[60-i]\) 就是一部分的解了,
这样就不用考虑顺序了,每种情况这样相乘就行了,还有当i=30的时候, 就是n*(n-1)/2的结果,n就是30的个数,
同理不要忘了样例2的情况就是模为0的情况,和为30时同样的操作,n*(n-1)/2,累加即可。
class Solution {
public:
int numPairsDivisibleBy60(vector<int>& time) {
map<int,int>mp;
for(int i=0;i<time.size();i++)
{
mp[time[i]%60]++;
}
// cout<<endl;
int cnt=0;
for(int i=1;i<30;i++)
cnt+=mp[i]*mp[60-i];
cnt+=mp[30]*(mp[30]-1)/2;
int ll=mp[0];
cnt+=ll*(ll-1)/2;
return cnt;
}
};