Pairs of Songs With Total Durations Divisible by 60

https://leetcode.com/contest/weekly-contest-128/problems/pairs-of-songs-with-total-durations-divisible-by-60/

In a list of songs, thei-th song has a duration of time[i]seconds.

Return the number of pairs of songs for which their total duration in seconds is divisible by60. Formally, we want the number of indicesi < jwith(time[i] + time[j]) % 60 == 0.

Example 1:

Input: 
[30,20,150,100,40]
Output: 
3
Explanation: 
Three pairs have a total duration divisible by 60:
(time[0] = 30, time[2] = 150): total duration 180
(time[1] = 20, time[3] = 100): total duration 120
(time[1] = 20, time[4] = 40): total duration 60

Example 2:

Input: 
[60,60,60]
Output: 
3
Explanation: 
All three pairs have a total duration of 120, which is divisible by 60.

Thoughts

用freq table统计出每个数%60后出现的频率,然后对每个t找60 - t的个数,相加除二即可。当0,应特殊处理-1,因为它会把自身多配一次。

更简单的方法,其实pair个数在第一次遍历时就能数清楚,因为数能组成pair的第二个数的出现次数即可。

Code

class Solution {
public:
    int numPairsDivisibleBy60(vector<int>& time) {
        vector<int> freq(60);
        int res = 0;
        for (int t : time) {
            res += freq[(60 - t % 60) % 60];
            ++freq[t % 60];
        }

        return res;
    }
};

Last updated