题目

给你一个整数 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简单题之比赛中的配对次数相关推荐

  1. Leetcode1688. 比赛中的配对次数[C++题解]:简单题模拟

    文章目录 题目 题目链接 题目 题意重述:给定n支队伍.若n为偶数,两两配对,晋级n/2支队伍:若n为奇数,随机晋级一支队伍,剩下的两两配对.晋级(n-1)/2+1支队伍. 统计决出冠军时总共的配对次 ...

  2. 【快乐水题】1688. 比赛中的配对次数

    原题: 力扣链接:1688. 比赛中的配对次数 题目简述: 给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n ...

  3. 1688.比赛中的配对次数-LeetCode

    难度:简单 目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 四.总结 一.问题描述 这里直接采用的是LeetCode上面的问题描述. 给你一个整数 n ,表示比赛中的队伍数 ...

  4. LeetCode 1688. 比赛中的配对次数(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n / 2 场比赛 ...

  5. 1688比赛中的配对次数

    给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮. 如果 ...

  6. LeetCode简单题之字符串中的单词数

    题目 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John&q ...

  7. LeetCode简单题之矩阵中的幸运数

    题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元素中最 ...

  8. LeetCode简单题之数组中的字符串匹配

    题目 给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词.请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词. 如果你可以删除 words[j] 最左侧和/或最 ...

  9. LeetCode简单题之二叉树中第二小的节点

    题目 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,即 root.val ...

最新文章

  1. kthread_work和kthread_worker机制
  2. 20080823-jsp中include指令与动作的不同
  3. 第一章 初始MySQL
  4. 【渝粤教育】国家开放大学2018年春季 0508-21T影视特技及后期合成 参考试题
  5. 如何安装pylab:python如何导入matplotlib模块
  6. Cloud Toolkit 应用部署、文件上传支持上传进度实时展示
  7. android 底部弹窗失效,Android实现从底部弹出Dialog(和PopWindow实现的效果同样)
  8. python界面制作和unity的有区别吗_由1~4人利用Sratch、Python、Unity或其它游戏开发工具设计与制作一个的教育类游戏。...
  9. iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
  10. 计算机学生选课系统毕业论文,学生选课管理系统论文
  11. FFmpeg硬件加速
  12. ACC测试理论--google软件测试之道
  13. wireshark抓包工具详细说明
  14. MySQL查看索引和数据所占内存
  15. 软件开发者的终极梦想:揭秘谷歌编程面试
  16. 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管
  17. stormzhang Android 学习之路
  18. Android 图形架构之一 ——概述
  19. Linux从入门到入狱-01
  20. 【人工智能】农夫过河问题

热门文章

  1. Go 学习笔记(74)— Go 标准库之 unsafe
  2. http传输json文件_python
  3. 正则表达式中的\.表示什么意思
  4. 深入理解BP神经网络的细节
  5. GPU与CPU交互技术
  6. 2019个嵌入式市场研究,持续的C/C++优势
  7. CVPR2020:基于层次折叠的跳跃式注意网络点云完成
  8. Waymo的自主进化
  9. Laravel Dcat Admin 安装
  10. Python机器学习:训练Tesseract