1688:比赛中的配对次数

This commit is contained in:
轩辕龙儿 2022-01-25 13:50:11 +08:00
parent 6d397ff0d9
commit bc4ab8d930
2 changed files with 121 additions and 0 deletions

View File

@ -0,0 +1,79 @@
//给你一个整数 n 表示比赛中的队伍数比赛遵循一种独特的赛制
//
//
// 如果当前队伍数是 偶数 那么每支队伍都会与另一支队伍配对总共进行 n / 2 场比赛且产生 n / 2 支队伍进入下一轮
// 如果当前队伍数为 奇数 那么将会随机轮空并晋级一支队伍其余的队伍配对总共进行 (n - 1) / 2 场比赛且产生 (n - 1) / 2 + 1
// 支队伍进入下一轮
//
//
// 返回在比赛中进行的配对次数直到决出获胜队伍为止
//
//
//
// 示例 1
//
// 输入n = 7
//输出6
//解释比赛详情
//- 1 队伍数 = 7 配对次数 = 3 4 支队伍晋级
//- 2 队伍数 = 4 配对次数 = 2 2 支队伍晋级
//- 3 队伍数 = 2 配对次数 = 1 决出 1 支获胜队伍
//总配对次数 = 3 + 2 + 1 = 6
//
//
// 示例 2
//
// 输入n = 14
//输出13
//解释比赛详情
//- 1 队伍数 = 14 配对次数 = 7 7 支队伍晋级
//- 2 队伍数 = 7 配对次数 = 3 4 支队伍晋级
//- 3 队伍数 = 4 配对次数 = 2 2 支队伍晋级
//- 4 队伍数 = 2 配对次数 = 1 决出 1 支获胜队伍
//总配对次数 = 7 + 3 + 2 + 1 = 13
//
//
//
//
// 提示
//
//
// 1 <= n <= 200
//
// Related Topics 数学 模拟 👍 57 👎 0
package leetcode.editor.cn;
//1688:比赛中的配对次数
public class CountOfMatchesInTournament {
public static void main(String[] args) {
Solution solution = new CountOfMatchesInTournament().new Solution();
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int numberOfMatches(int n) {
// 总配对次数
int sum = 0;
while (n > 1) {
if (n % 2 == 1) {
// 奇数队伍
// 配对次数(n - 1) / 2
sum += (n - 1) / 2;
// 剩余队伍数(n - 1) / 2 + 1
n = (n - 1) / 2 + 1;
} else {
// 偶数队伍
// 配对次数n / 2
sum += n / 2;
// 剩余队伍数n / 2
n /= 2;
}
}
return sum;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,42 @@
<p>给你一个整数 <code>n</code> ,表示比赛中的队伍数。比赛遵循一种独特的赛制:</p>
<ul>
<li>如果当前队伍数是 <strong>偶数</strong> ,那么每支队伍都会与另一支队伍配对。总共进行 <code>n / 2</code> 场比赛,且产生 <code>n / 2</code> 支队伍进入下一轮。</li>
<li>如果当前队伍数为 <strong>奇数</strong> ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 <code>(n - 1) / 2</code> 场比赛,且产生 <code>(n - 1) / 2 + 1</code> 支队伍进入下一轮。</li>
</ul>
<p>返回在比赛中进行的配对次数,直到决出获胜队伍为止。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>n = 7
<strong>输出:</strong>6
<strong>解释:</strong>比赛详情:
- 第 1 轮:队伍数 = 7 ,配对次数 = 3 4 支队伍晋级。
- 第 2 轮:队伍数 = 4 ,配对次数 = 2 2 支队伍晋级。
- 第 3 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
总配对次数 = 3 + 2 + 1 = 6
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>n = 14
<strong>输出:</strong>13
<strong>解释:</strong>比赛详情:
- 第 1 轮:队伍数 = 14 ,配对次数 = 7 7 支队伍晋级。
- 第 2 轮:队伍数 = 7 ,配对次数 = 3 4 支队伍晋级。
- 第 3 轮:队伍数 = 4 ,配对次数 = 2 2 支队伍晋级。
- 第 4 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
总配对次数 = 7 + 3 + 2 + 1 = 13
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 200</code></li>
</ul>
<div><div>Related Topics</div><div><li>数学</li><li>模拟</li></div></div><br><div><li>👍 57</li><li>👎 0</li></div>