LeetCode简单题之比赛中的配对次数

news/2025/3/14 17:17:33/

题目

给你一个整数 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

在这里插入图片描述


http://www.ppmy.cn/news/606244.html

相关文章

Cache技术实战分析

Cache技术实战分析 在计算机存储系统的层次结构中&#xff0c;介于中央处理器和主存储器之间的高速小容量存储器。与主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。   某些机器甚至有二级三级缓存&#xff0c;每级缓存比前…

BERT可视化工具bertviz体验

BERT可视化工具体验&#xff1a;bertviz是用于BERT模型注意力层的可视化页面。 1&#xff0c;bertviz的github地址&#xff1a;https://github.com/jessevig/bertviz 2&#xff0c;将bertviz项目clone到本地&#xff0c;启动Jupyter notebbok。 D:\PycharmProjects\bertviz-mas…

极端交换————晴问算法

文章目录 1 题目2 思路3 实现 1 题目 2 思路 以此比较最大值、最小值&#xff0c;记录最大、最小值以及其下标位置&#xff0c;结束遍历后&#xff0c;交换其位置。 3 实现 #include<iostream> using namespace std;int main(){int n;scanf("%d", &n);i…

LeetCode简单题之二分查找

题目 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9…

二叉树的遍历方式(递归)

前序遍历思路图示代码中序遍历思路代码后序遍历思路代码前序遍历 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 思路 递归需要考虑三个要素 确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0…

DPU与超算服务器

DPU与超算服务器 软硬件融合&#xff1a;从DPU到超异构计算 DPU是当前一个非常热门的话题。副标题是“从DPU到超异构计算”&#xff0c;本文详细分析了对DPU认识的四个层级&#xff1a; Level 1&#xff1a;DPU是CPU的任务卸载/加速。 Level 2&#xff1a;IPU是基础设施&…

nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型

对于cnn前馈神经网络如果前馈一次写一个forward函数会有些麻烦&#xff0c;在此就有两种简化方式&#xff0c;ModuleList和Sequential。其中Sequential是一个特殊的module&#xff0c;它包含几个子Module&#xff0c;前向传播时会将输入一层接一层的传递下去。ModuleList也是一…

LeetCode简单题之最常见的单词

题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多&#xff0c;同时不在禁用列表中的单词。 题目保证至少有一个词不在禁用列表中&#xff0c;而且答案唯一。 禁用列表中的单词用小写字母表示&#xff0c;不含标点符号。段落中的单词不区分大小写…