LeetCode简单题之比赛中的配对次数
题目
给你一个整数 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
来源:力扣(LeetCode)
解题思路
这个题其实题目已经告诉读者要怎么写代码了,n个队伍,如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。
class Solution:def numberOfMatches(self, n: int) -> int:s=0while n>1:if n%2==0:s+=n//2n=n//2else:s+=(n-1)//2n=(n-1)//2+1return s
以上是模拟的办法来解决此题,如果你在模拟的过程中稍微留意便能发现,这个模拟过程有点类似于哈夫曼数的构造。每一阶段我们认为各个队伍实力旗鼓相当,那么其权值就都是最小的或者最大的,如果n为奇数那么肯定会有一个队伍是相对其他队伍较弱或者较强的,我们默认他已经晋级(轮空相当于直接晋级),比赛都必须是两个队伍成对存在的,所以我们需要构造一个二叉的哈夫曼树,在哈夫曼树中每两个度就是一场比赛,而二叉的哈夫曼树中除了叶子节点就剩下非叶子节点了,且非叶子节点度均为2,故非叶子结点数就是比赛场次。根据二叉树的性质可知度为2的结点数加1就是度为0的结点数,所以非叶子节点就是叶子节点数减1。
class Solution:def numberOfMatches(self, n: int) -> int:return n-1
LeetCode简单题之比赛中的配对次数相关推荐
- Leetcode1688. 比赛中的配对次数[C++题解]:简单题模拟
文章目录 题目 题目链接 题目 题意重述:给定n支队伍.若n为偶数,两两配对,晋级n/2支队伍:若n为奇数,随机晋级一支队伍,剩下的两两配对.晋级(n-1)/2+1支队伍. 统计决出冠军时总共的配对次 ...
- 【快乐水题】1688. 比赛中的配对次数
原题: 力扣链接:1688. 比赛中的配对次数 题目简述: 给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n ...
- 1688.比赛中的配对次数-LeetCode
难度:简单 目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 四.总结 一.问题描述 这里直接采用的是LeetCode上面的问题描述. 给你一个整数 n ,表示比赛中的队伍数 ...
- LeetCode 1688. 比赛中的配对次数(模拟)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n / 2 场比赛 ...
- 1688比赛中的配对次数
给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮. 如果 ...
- LeetCode简单题之字符串中的单词数
题目 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John&q ...
- LeetCode简单题之矩阵中的幸运数
题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元素中最 ...
- LeetCode简单题之数组中的字符串匹配
题目 给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词.请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词. 如果你可以删除 words[j] 最左侧和/或最 ...
- LeetCode简单题之二叉树中第二小的节点
题目 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,即 root.val ...
最新文章
- kthread_work和kthread_worker机制
- 20080823-jsp中include指令与动作的不同
- 第一章 初始MySQL
- 【渝粤教育】国家开放大学2018年春季 0508-21T影视特技及后期合成 参考试题
- 如何安装pylab:python如何导入matplotlib模块
- Cloud Toolkit 应用部署、文件上传支持上传进度实时展示
- android 底部弹窗失效,Android实现从底部弹出Dialog(和PopWindow实现的效果同样)
- python界面制作和unity的有区别吗_由1~4人利用Sratch、Python、Unity或其它游戏开发工具设计与制作一个的教育类游戏。...
- iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
- 计算机学生选课系统毕业论文,学生选课管理系统论文
- FFmpeg硬件加速
- ACC测试理论--google软件测试之道
- wireshark抓包工具详细说明
- MySQL查看索引和数据所占内存
- 软件开发者的终极梦想:揭秘谷歌编程面试
- 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管
- stormzhang Android 学习之路
- Android 图形架构之一 ——概述
- Linux从入门到入狱-01
- 【人工智能】农夫过河问题