https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/
https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/discuss/256738/JavaC%2B%2BPython-Two-Sum-with-K-60
In
In a list of songs, the
i
-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 by
60
. Formally, we want the number of indices i < j
with (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.
Note:
1 <= time.length <= 60000
1 <= time[i] <= 500
https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/discuss/256738/JavaC%2B%2BPython-Two-Sum-with-K-60
In
Java
you can use Math.floorMod(-t, 60)
instead of (60 - t % 60) % 60
.
Calculate the
time % 60
then it will be exactly same as two sum problem.
Java:
public int numPairsDivisibleBy60(int[] time) {
int c[] = new int[60], res = 0;
for (int t : time) {
res += c[(60 - t % 60) % 60];
c[t % 60] += 1;
}
return res;
}
https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/discuss/256726/Java-O(n)-code-w-comment-similar-to-Two-Sum
Let
target
in Two Sum be 60 and each item in time
% 60, the two problems are very similar to each other. public int numPairsDivisibleBy60(int[] time) {
Map<Integer, Integer> count = new HashMap<>();
int ans = 0;
for (int t : time) {
int d = (60 - t % 60) % 60;
if (count.containsKey(d)) { ans += count.get(d); } // in current HashMap, get the number of songs that if adding t equals to a multiple of 60.
count.put(t % 60, 1 + count.getOrDefault(t % 60, 0)); // update the number of t % 60.
}
return ans;
}