Skip to content

Commit 17e4d6d

Browse files
add 1013
1 parent 25b68c8 commit 17e4d6d

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Your ideas/fixes/algorithms are more than welcome!
2727

2828
| # | Title | Solutions | Time | Space | Video | Difficulty | Tag
2929
|-----|----------------|---------------|---------------|---------------|--------|-------------|-------------
30+
|1013|[Pairs of Songs With Total Durations Divisible by 60](https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1013.java) | O(n) | O(1) | |Easy|
3031
|1002|[Find Common Characters](https://leetcode.com/problems/find-common-characters/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1002.java) | O(n) | O(1) | |Easy|
3132
|999|[Available Captures for Rook](https://leetcode.com/problems/available-captures-for-rook/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_999.java) | O(1) | O(1) | |Easy|
3233
|997|[Find the Town Judge](https://leetcode.com/problems/find-the-town-judge/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_997.java) | O(n) | O(n) | |Easy|
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.fishercoder.solutions;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
/**
7+
* 1013. Pairs of Songs With Total Durations Divisible by 60
8+
*
9+
* In a list of songs, the i-th song has a duration of time[i] seconds.
10+
*
11+
* Return the number of pairs of songs for which their total duration in seconds is divisible by 60.
12+
* Formally, we want the number of indices i < j with (time[i] + time[j]) % 60 == 0.
13+
*
14+
* Example 1:
15+
* Input: [30,20,150,100,40]
16+
* Output: 3
17+
* Explanation: Three pairs have a total duration divisible by 60:
18+
* (time[0] = 30, time[2] = 150): total duration 180
19+
* (time[1] = 20, time[3] = 100): total duration 120
20+
* (time[1] = 20, time[4] = 40): total duration 60
21+
*
22+
* Example 2:
23+
* Input: [60,60,60]
24+
* Output: 3
25+
* Explanation: All three pairs have a total duration of 120, which is divisible by 60.
26+
*
27+
* Note:
28+
*
29+
* 1 <= time.length <= 60000
30+
* 1 <= time[i] <= 500
31+
* */
32+
public class _1013 {
33+
public static class Solution1 {
34+
/**Credit: 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
35+
*
36+
* Think of Problem 1: Two Sum
37+
* Assume target is 60, each item in time % 60.
38+
* Then this problem becomes very similar to Problem 1.
39+
* */
40+
public int numPairsDivisibleBy60(int[] time) {
41+
int result = 0;
42+
Map<Integer, Integer> map = new HashMap<>();
43+
for (int t : time) {
44+
int d = (60 - t % 60) % 60;
45+
if (map.containsKey(d)) {
46+
result += map.get(d);
47+
}
48+
map.put(t % 60, map.getOrDefault(t % 60, 0) + 1);
49+
}
50+
return result;
51+
}
52+
}
53+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.fishercoder;
2+
3+
import com.fishercoder.solutions._1013;
4+
import org.junit.BeforeClass;
5+
import org.junit.Test;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
public class _1013Test {
10+
private static _1013.Solution1 solution1;
11+
private static int[] time;
12+
13+
@BeforeClass
14+
public static void setup() {
15+
solution1 = new _1013.Solution1();
16+
}
17+
18+
@Test
19+
public void test1() {
20+
time = new int[]{30, 20, 150, 100, 40};
21+
assertEquals(3, solution1.numPairsDivisibleBy60(time));
22+
}
23+
24+
@Test
25+
public void test2() {
26+
time = new int[]{60, 60, 60};
27+
assertEquals(3, solution1.numPairsDivisibleBy60(time));
28+
}
29+
30+
}

0 commit comments

Comments
 (0)