1688. Count of Matches in Tournament #
题目 #
- 给你一个整数
n
,表示比赛中的队伍数。比赛遵循一种独特的赛制:- 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行
n / 2
场比赛,且产生n / 2
支队伍进入下一轮。 - 如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行
(n - 1) / 2
场比赛,且产生(n - 1) / 2 + 1
支队伍进入下一轮。
- 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行
- 返回在比赛中进行的配对次数,直到决出获胜队伍为止。
思路 #
模拟 #
脑筋急转弯 #
- 共有
n
支队伍,每场比赛淘汰一支,最终剩下一支冠军队。 - 即有
n−1
支队伍需要通过n−1
场比赛被淘汰。
代码 #
模拟 #
class Solution {
public int numberOfMatches(int n) {
int ans = 0;
while (n != 1) {
ans += n % 2 == 1 ? (n - 1) / 2 : n / 2;
n = n % 2 == 1 ? n / 2 + 1 : n / 2;
}
return ans;
}
}
脑筋急转弯 #
class Solution {
public int numberOfMatches(int n) {
return n-1;
}
}