[LeetCode] 544. 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.
有n只队伍(n的范围[2, 212], 正偶数),编号为1 ~ n,队伍按照最强和最弱的分在一组的原则分组比赛,给出一直到最后一轮比赛的分组方法。
解法1:迭代iterative,
解法2:递归recursive,
Java:
public String findContestMatch(int n) {
List<String> matches = new ArrayList<>();
for(int i = 1; i <= n; i++) matches.add(String.valueOf(i));
while(matches.size() != 1){
List<String> newRound = new ArrayList<>();
for(int i = 0; i < matches.size()/2; i++)
newRound.add("(" + matches.get(i) + "," + matches.get(matches.size() - i - 1) + ")");
matches = newRound;
}
return matches.get(0);
}
Java:
public String findContestMatch(int n) {
String[] m = new String[n];
for (int i = 0; i < n; i++) {
m[i] = String.valueOf(i + 1);
}
while (n > 1) {
for (int i = 0; i < n / 2; i++) {
m[i] = "(" + m[i] + "," + m[n - 1 - i] + ")";
}
n /= 2;
}
return m[0];
}
Java: LinkedList
public String findContestMatch(int n) {
LinkedList<String> res = new LinkedList<>();
for (int i = 1; i <= n; i++) res.add(i + "");
while (res.size() > 1) {
LinkedList<String> tmp = new LinkedList<>();
while (!res.isEmpty()) {
tmp.add("(" + res.remove(0) + "," + res.remove(res.size() - 1) + ")");
}
res = tmp;
}
return res.get(0);
}
Java:
public string FindContestMatch(int n) {
string[] arr = new string[n];
for (int i = 0; i < n; i++) arr[i] = (i + 1).ToString();
int left = 0;
int right = n - 1;
while (left < right)
{
while (left < right)
{
arr[left] = "(" + arr[left] + "," + arr[right] + ")";
left++;
right--;
}
left = 0;
}
return arr[0];
}
Python:
# Time: O(n)
# Space: O(n)
class Solution(object):
def findContestMatch(self, n):
"""
:type n: int
:rtype: str
"""
matches = map(str, range(1, n+1))
while len(matches)/2:
matches = ["({},{})".format(matches[i], matches[-i-1]) for i in xrange(len(matches)/2)]
return matches[0]
Python:
class Solution(object):
def solve(self, groups):
size = len(groups)
if size == 1: return groups[0]
ngroups = []
for x in range(size / 2):
ngroups.append('(' + groups[x] + ',' + groups[size - x - 1] + ')')
return self.solve(ngroups) def findContestMatch(self, n):
"""
:type n: int
:rtype: str
"""
return self.solve(map(str, range(1, n + 1)))
Python: wo
class Solution():
def contestMatches(self, n):
s = []
for i in xrange(n):
s.append(str(i + 1))
while n > 1:
cur = []
for m in xrange(len(s) / 2):
cur.append((s[m], s[len(s) - 1 - m]))
s = cur
n /= 2 return s[0]
Python: wo
class Solution():
def contestMatches(self, n):
s = []
for i in xrange(n):
s.append(str(i + 1)) return self.helper(s) def helper(self, s):
if len(s) == 1:
return s[0]
curr = []
i, j = 0, len(s) - 1
while i < j:
curr.append((s[i], s[j]))
i += 1
j -= 1
return self.helper(curr)
C++:
// Time: O(n)
// Space: O(n)
class Solution {
public:
string findContestMatch(int n) {
vector<string> matches(n);
for (int i = 0; i < n; ++i) {
matches[i] = to_string(i + 1);
}
while (matches.size() / 2) {
vector<string> next_matches;
for (int i = 0; i < matches.size() / 2; ++i) {
next_matches.emplace_back("(" + matches[i] + "," + matches[matches.size() - 1 - i] + ")");
}
swap(matches, next_matches);
}
return matches[0];
}
};
C++:
class Solution {
public:
string findContestMatch(int n) {
vector<string> v;
for (int i = 1; i <= n; ++i) v.push_back(to_string(i));
while (n > 1) {
for (int i = 0; i < n / 2; ++i) {
v[i] = "(" + v[i] + "," + v[n - i - 1] + ")";
}
n /= 2;
}
return v[0];
}
};
C++:
class Solution {
public:
string findContestMatch(int n) {
vector<string> v;
for (int i = 1; i <= n; ++i) v.push_back(to_string(i));
helper(n, v);
return v[0];
}
void helper(int n, vector<string>& v) {
if (n == 1) return;
for (int i = 0; i < n; ++i) {
v[i] = "(" + v[i] + "," + v[n - i - 1] + ")";
}
helper(n / 2, v);
}
};
All LeetCode Questions List 题目汇总
[LeetCode] 544. Output Contest Matches 输出比赛匹配对的更多相关文章
- [LeetCode] Output Contest Matches 输出比赛匹配对
During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...
- 【leetcode】544. Output Contest Matches
原题 During the NBA playoffs, we always arrange the rather strong team to play with the rather weak te ...
- 【LeetCode】544. Output Contest Matches 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
- LeetCode Output Contest Matches
原题链接在这里:https://leetcode.com/problems/output-contest-matches/description/ 题目: During the NBA playoff ...
- LeetCode 544----Output Contest Matches
During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...
- BZOJ1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 645 Solved: 433 ...
- Bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 传递闭包,bitset
1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 891 Solved: 590 ...
- BZOJ 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛( floyd )
对于第 i 头牛 , 假如排名比它高和低的数位 n - 1 , 那么他的 rank 便可以确定 . floyd -------------------------------------------- ...
- [bzoj1612][Usaco2008 Jan]Cow Contest奶牛的比赛_dfs
Cow Contest奶牛的比赛 bzoj-1612 Usaco-2008 Jan 题目大意:题目链接. 注释:略. 想法: 我们对于每个点dfs,看一下比这个点大的点加上比这个点小的点是否是n-1即 ...
随机推荐
- myBatis框架之入门(四)
Mybatis多表管理查询 多表关联关系分析: 多表关联:至少两个表关联.分析多表关系的经验技巧:从一条记录出发,不要从表整体去分析,比如分析A表和B表关系,A表中的一条记录对应B表中的几条记录,如果 ...
- NOIP2018 旅行 和 赛道修建
填很久以前的坑. 旅行 给一棵 n 个点的基环树,求字典序最小的DFS序. n ≤ 5000 题解 O(n2) 做法非常显然,枚举断掉环上哪条边然后贪心即可.当然我去年的骚操作只能得88分. O(n ...
- Linux——查询服务器公网IP
前言 服务器查看IP,十分简单,但是如何查看公网IP呢? 步骤 网站:http://www.cip.cc/ 命令行查询(详细): UNIX/Linux: #curl cip.cc Windows: & ...
- 按键精灵PC端脚本
定义变量的时候不需要定义类型 ,由于是易语言,变量名可以是中文 文本路径 = "C:\Users\Administrator\Desktop\1.txt"//改成自己的文本路径 T ...
- volatile 关键词
volatile 关键字指示一个字段可以由多个同时执行的线程修改. 出于性能原因,编译器,运行时系统甚至硬件都可能重新排列对存储器位置的读取和写入. 声明了 volatile 的字段不进行这些优化.这 ...
- mongoDB新增数据库
现在,如果我们想创建名为exampledb的数据库.只需运行以下命令并在数据库中保存一条记录.保存第一个示例后,将看到已创建新数据库. use tt 这样就创建了一个数据库,如果什么都不操作离开的话, ...
- How to change hostname on debian
How to change hostname on Debian 10 Linux last updated July 13, 2019 in CategoriesDebian / Ubuntu, L ...
- LOJ P10013 曲线 题解
每日一题 day38 打卡 Analysis 这道题运用的是三分,就是说具有一定的单调性,找最大最小值,然后和二分基本类似,就是说特性就是说当前两个点比较,较优的点和最优点在相对了较差点的同侧,就是说 ...
- learning scala extracors example
object Twice { def apply(x: Int): Int = x * def unapply(z: Int): Option[Int] = == ) Some(z / ) else ...
- 从TEB到PEB再到SEH(一)
什么是TEB? TEB(Thread Environment Block,线程环境块) 线程环境块中存放着进程中所有线程的各种信息 这里我们了解到了TEB即为线程环境块, 进程中每一条线程都对应着的自 ...