1010. 总持续时间可被 60 整除的歌曲

[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;
    }
};
posted @ 2020-07-11 16:20  branna  阅读(98)  评论(0编辑  收藏  举报