-
Notifications
You must be signed in to change notification settings - Fork 154
/
output-contest-matches.js
77 lines (71 loc) · 2.35 KB
/
output-contest-matches.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
* Output Contest Matches
*
* During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team,
* like make the rank 1 team play with the rank nth team, which is a good strategy to make the contest more
* interesting. Now, you're given n teams, you need to output their final contest matches in the form of a string.
*
* The n teams are given in the form of positive integers from 1 to n, which represents their initial rank.
* (Rank 1 is the strongest team and Rank n is the weakest team.) We'll use parentheses('(', ')') and commas(',')
* to represent the contest team pairing - parentheses('(' , ')') for pairing and commas(',') for partition.
* During the pairing process in each round, you always need to follow the strategy of making the rather strong
* one pair with the rather weak one.
*
* Example 1:
*
* Input: 2
* Output: (1,2)
*
* Explanation:
* Initially, we have the team 1 and the team 2, placed like: 1,2.
* Then we pair the team (1,2) together with '(', ')' and ',', which is the final answer.
*
* Example 2:
*
* Input: 4
* Output: ((1,4),(2,3))
*
* Explanation:
* 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.
*
* And we got (1,4),(2,3).
*
* 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.
*
* And we got the final answer ((1,4),(2,3)).
*
* Example 3:
*
* Input: 8
* Output: (((1,8),(4,5)),((2,7),(3,6)))
*
* Explanation:
* First round: (1,8),(2,7),(3,6),(4,5)
* Second round: ((1,8),(4,5)),((2,7),(3,6))
* Third round: (((1,8),(4,5)),((2,7),(3,6)))
*
* Since the third round will generate the final winner, you need to output the answer (((1,8),(4,5)),((2,7),(3,6))).
*
* Note:
*
* - The n is in range [2, 212].
* - We ensure that the input n can be converted into the form 2k, where k is a positive integer.
*/
/**
* @param {number} n
* @return {string}
*/
const findContestMatch = n => {
let pairs = Array.from({ length: n }, (v, k) => k + 1);
while (pairs.length > 1) {
const temp = [];
for (let i = 0, j = pairs.length - 1; i < j; i++, j--) {
temp.push('(' + pairs[i] + ',' + pairs[j] + ')');
}
pairs = temp;
}
return pairs[0];
};
export { findContestMatch };