Skip to content

Commit 4dafe03

Browse files
[LEET-544] add 544
1 parent 6524976 commit 4dafe03

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed

leetcode-algorithms/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Algorithms
44
| # | Title | Solutions | Time | Space | Difficulty | Tag | Notes
55
|-----|----------------|---------------|---------------|---------------|-------------|--------------|-----
6+
|544|[Output Contest Matches](https://leetcode.com/problems/output-contest-matches/)|[Solution](../../master/leetcode-algorithms/src/main/java/com/stevesun/solutions/OutputContestMatches.java) | O(n) |O(n) | Medium | Recursion
67
|543|[Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/)|[Solution](../../master/leetcode-algorithms/src/main/java/com/stevesun/solutions/DiameterofBinaryTree.java) | O(n) |O(h) | Easy | Tree/DFS/Recursion
78
|542|[01 Matrix](https://leetcode.com/problems/01-matrix/)|[Solution](../../master/leetcode-algorithms/src/main/java/com/stevesun/solutions/_01Matrix.java) | O(m*n) |O(n) | Medium | BFS
89
|541|[Reverse String II](https://leetcode.com/problems/reverse-string-ii/)|[Solution](../../master/leetcode-algorithms/src/main/java/com/stevesun/solutions/ReverseStringII.java) | O(n) |O(1) | Easy | String
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.stevesun.solutions;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team,
8+
* like make the rank 1 team play with the rank nth team, which is a good strategy to make the contest more interesting.
9+
* Now, you're given n teams, you need to output their final contest matches in the form of a string.
10+
* The n teams are given in the form of positive integers from 1 to n, which represents their initial rank.
11+
* (Rank 1 is the strongest team and Rank n is the weakest team.)
12+
* We'll use parentheses('(', ')') and commas(',') to represent the contest team pairing - parentheses('(' , ')')
13+
* for pairing and commas(',') for partition. During the pairing process in each round,
14+
* you always need to follow the strategy of making the rather strong one pair with the rather weak one.
15+
16+
Example 1:
17+
Input: 2
18+
Output: (1,2)
19+
20+
Explanation:
21+
Initially, we have the team 1 and the team 2, placed like: 1,2.
22+
Then we pair the team (1,2) together with '(', ')' and ',', which is the final answer.
23+
24+
25+
Example 2:
26+
Input: 4
27+
Output: ((1,4),(2,3))
28+
29+
Explanation:
30+
In the first round, we pair the team 1 and 4, the team 2 and 3 together, as we need to make the strong team and weak team together.
31+
And we got (1,4),(2,3).
32+
In the second round, the winners of (1,4) and (2,3) need to play again to generate the final winner, so you need to add the paratheses outside them.
33+
And we got the final answer ((1,4),(2,3)).
34+
35+
36+
Example 3:
37+
Input: 8
38+
Output: (((1,8),(4,5)),((2,7),(3,6)))
39+
40+
Explanation:
41+
First round: (1,8),(2,7),(3,6),(4,5)
42+
Second round: ((1,8),(4,5)),((2,7),(3,6))
43+
Third round: (((1,8),(4,5)),((2,7),(3,6)))
44+
Since the third round will generate the final winner, you need to output the answer (((1,8),(4,5)),((2,7),(3,6))).
45+
46+
Note:
47+
The n is in range [2, 212].
48+
We ensure that the input n can be converted into the form 2k, where k is a positive integer.
49+
*/
50+
public class OutputContestMatches {
51+
52+
public String findContestMatch(int n) {
53+
List<String> pairs = new ArrayList<>();
54+
int left = 1, right = n;
55+
while (left < right) {
56+
pairs.add("(" + left + "," + right + ")");
57+
left++;
58+
right--;
59+
}
60+
if (n == 2) return pairs.get(0);
61+
return generateFinal(pairs, n/2);
62+
}
63+
64+
private String generateFinal(List<String> pairs, int n) {
65+
if (n > 2) {
66+
int size = pairs.size();
67+
int left = 0;
68+
int right = size-1;
69+
List<String> newPairs = new ArrayList<>();
70+
while (left < right) {
71+
String newPair = "(" + pairs.get(left) + "," + pairs.get(right) + ")";
72+
newPairs.add(newPair);
73+
left++;
74+
right--;
75+
}
76+
return generateFinal(newPairs, n/2);
77+
}
78+
return "(" + pairs.get(0) + "," + pairs.get(1) + ")";
79+
}
80+
81+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.stevesun;
2+
3+
import com.stevesun.solutions.OutputContestMatches;
4+
import org.junit.Before;
5+
import org.junit.BeforeClass;
6+
import org.junit.Test;
7+
8+
import static junit.framework.TestCase.assertEquals;
9+
10+
public class OutputContestMatchesTest {
11+
private static OutputContestMatches test;
12+
private static int n;
13+
private static String expected;
14+
private static String actual;
15+
16+
@BeforeClass
17+
public static void setup(){
18+
test = new OutputContestMatches();
19+
}
20+
21+
@Before
22+
public void setupForEachTest(){}
23+
24+
@Test
25+
public void test1(){
26+
n = 2;
27+
expected = "(1,2)";
28+
actual = test.findContestMatch(n);
29+
assertEquals(expected, actual);
30+
}
31+
32+
@Test
33+
public void test2(){
34+
n = 4;
35+
expected = "((1,4),(2,3))";
36+
actual = test.findContestMatch(n);
37+
assertEquals(expected, actual);
38+
}
39+
40+
@Test
41+
public void test3(){
42+
n = 8;
43+
expected = "(((1,8),(4,5)),((2,7),(3,6)))";
44+
actual = test.findContestMatch(n);
45+
assertEquals(expected, actual);
46+
}
47+
48+
}

0 commit comments

Comments
 (0)