Python解決“比賽配對”問題

Python解決“比賽配對”問題

  • 問題描述
  • 測試樣例
  • 解決思路
  • 代碼

問題描述

小R正在組織一個比賽,比賽中有 n 支隊伍參賽。比賽遵循以下獨特的賽制:

  • 如果當前隊伍數為 偶數,那么每支隊伍都會與另一支隊伍配對。總共進行 n / 2 場比賽,且產生 n / 2 支隊伍進入下一輪。
  • 如果當前隊伍數為 奇數,那么將會隨機輪空并晉級一支隊伍,其余的隊伍配對。總共進行 (n - 1) / 2 場比賽,且產生 (n - 1) / 2 + 1 支隊伍進入下一輪。

小R想知道在比賽中進行的配對次數,直到決出唯一的獲勝隊伍為止。

測試樣例

樣例1:
輸入:n = 7
輸出:6

樣例2:
輸入:n = 14
輸出:13

樣例3:
輸入:n = 1
輸出:0

解決思路

數學歸納法和遞歸思想。題目描述了一個比賽配對的過程,要求計算從 n 支隊伍開始,直到決出唯一獲勝隊伍為止的總配對次數。通過觀察可以發現,每次配對后,隊伍數會減少一半(偶數情況)或減少一半加一(奇數情況)。最終,隊伍數會減少到1,此時不再需要配對。因此,問題的核心在于計算從 n 到 1 的過程中,總共進行了多少次配對。通過數學歸納法可以證明,從 n 支隊伍到決出唯一獲勝隊伍,總共需要進行 n - 1 次配對。

  1. 初始狀態:從 n 支隊伍開始。
  2. 遞歸配對:每次配對后,隊伍數減少一半(偶數情況)或減少一半加一(奇數情況)。
  3. 終止條件:當隊伍數減少到1時,不再需要配對。
  4. 總配對次數:通過數學歸納法可以證明,從 n 支隊伍到決出唯一獲勝隊伍,總共需要進行 n - 1 次配對。

時間復雜度:O(1)。直接返回 n - 1,不需要額外的計算。
空間復雜度:O(1)。只使用了常數級別的額外空間。

代碼

def solution(n: int) -> int:# 初始化配對次數pairs = 0# 當隊伍數大于1時,繼續進行比賽while n > 1:# 如果隊伍數為偶數if n % 2 == 0:# 進行 n / 2 場比賽pairs += n // 2# 剩余 n / 2 支隊伍n //= 2else:# 如果隊伍數為奇數# 進行 (n - 1) / 2 場比賽pairs += (n - 1) // 2# 剩余 (n - 1) / 2 + 1 支隊伍n = (n - 1) // 2 + 1return pairsif __name__ == '__main__':print(solution(7) == 6)print(solution(14) == 13)print(solution(1) == 0)

簡單的代碼為:

def solution(n:int)->int:return n - 1if __name__ == '__main__':print(solution(n = 7) == 6)print(solution(n = 14) == 13)print(solution(n = 1) == 0)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72005.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp中使用leaferui使用Canvas繪制復雜異形表格的實現方法

需求: 如下圖,要實現左圖的樣式,先實現框架,文字到時候 往里填就行了,原來的解決方案是想用css,html來實現,發現實現起來蠻麻煩的。我也沒找到合適的實現方法,最后換使用canvas來實現&#xff…

大模型與呼叫中心融合:未來發展的潛力何在?

大模型與呼叫中心的結合,為企業帶來了前所未有的發展機遇。通過提升服務效率、優化營銷效果、降低運營成本、增強數據管理與分析能力、提升客戶體驗以及推動行業創新與變革,大模型呼叫中心正在重塑客戶服務與營銷的未來。 大模型與呼叫中心的結合具有巨…

vue3+ts+uniapp+unibest 微信小程序(第二篇)—— 圖文詳解自定義背景圖頁面布局、普通頁面布局、分頁表單頁面布局

文章目錄 簡介一、自定義背景圖布局1.1 效果預覽1.2 實現思路1.3 custom-page 組件全量代碼1.4 頁面使用 二、普通頁面布局2.1 效果預覽2.2 實現思路2.3 公共樣式部分2.4 頁面使用 三、分頁表單頁面布局3.1 效果預覽3.2 實現思路3.3 頁面代碼 簡介 開發工具:VsCode…

華為交換機堆疊方法

堆疊配置: 先把接口shutdown 第一臺: int stack-port 0/1 port interface XGigabitEthernet0/0/3 enable y qu int stack-port 0/2 port interface XGigabitEthernet0/0/4 enable y qu stack slot 0 priority 200 y 第二臺: int stack…

AI革命下的多元生態:DeepSeek、ChatGPT、XAI、文心一言與通義千問的行業滲透與場景重構

前言 人工智能技術的爆發式發展催生了多樣化的AI模型生態,從通用對話到垂直領域應用,從數據挖掘到創意生成,各模型憑借其獨特的技術優勢與場景適配性,正在重塑全球產業格局。本文將以DeepSeek、ChatGPT、XAI(可解釋人…

nginx 配置https

參考文檔:nginx 文檔 -- nginx官網|nginx下載安裝|nginx配置|nginx教程 配置 HTTPS 服務器 HTTPS 服務器優化 SSL 證書鏈 單個 HTTP/HTTPS 服務器 基于名稱的 HTTPS 服務器 具有多個名稱 的 SSL 證書 服務器名稱指示 兼容性 要配置 HTTPS 服務器,ssl…

python-leetcode-乘積最大子數組

152. 乘積最大子數組 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…

前端或者后端通常用到數組使用方式

第一個是:Array.from() 將具有length屬性或者可迭代的對象轉化為數組 Array.from(abcdef) // 返回值[a1, b1, c1, d1, e1, f1] Array.from(new Map([[b1, 1 ], [a1, 2 ]])) Array.from(new Set([ 1 , 2 , 3 ])) 第二個是:Array.reduce() 遍歷數組,將函數的返回值,存儲到累加器中…

最大子數組和力扣--53

目錄 題目 思路 代碼 題目 給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組是數組中的一個連續部分。 示例 1&#xff1a; 輸入&#xff1a;nums [-2,1,-3,4,-1…

JavaScript 深淺拷貝全面解析

在 JavaScript 中&#xff0c;深淺拷貝是處理對象復制的重要概念。它們的核心區別在于對 引用類型數據 的處理方式&#xff0c;理解這一點對避免程序中的意外數據污染至關重要。 一、核心概念解析 1. 基本類型 vs 引用類型 基本類型&#xff1a;Number, String, Boolean, null…

【大模型】大模型推理能力深度剖析:從通用模型到專業優化

大模型推理能力深度剖析&#xff1a;從通用模型到專業優化 大模型推理能力深度剖析&#xff1a;從通用模型到專業優化一、通用語言模型與推理模型的區別&#xff08;一&#xff09;通用語言模型&#xff1a;多任務的“萬金油”&#xff08;二&#xff09;推理模型&#xff1a;復…

RISC-V架構的平臺級中斷控制器(PLIC:platform-level interrupt controller)詳解

英文縮寫 英文縮寫中文含義PLICplatform-level interrupt controller&#xff0c;平臺級中斷控制器SMTsimultaneous multi-threading&#xff0c;并發多線程HARTRISC-V架構中的硬件線程SMTsimultaneous multi-threading&#xff0c;多線程執行M-MODEmachine mode&#xff0c;機…

[Web 安全] PHP 反序列化漏洞 —— PHP 序列化 反序列化

關注這個專欄的其他相關筆記&#xff1a;[Web 安全] 反序列化漏洞 - 學習筆記-CSDN博客 0x01&#xff1a;PHP 序列化 — Serialize 序列化就是將對象的狀態信息轉化為可以存儲或傳輸的形式的過程&#xff0c;在 PHP 中&#xff0c;通常使用 serialize() 函數來完成序列化的操作…

航空裝配自動化神器Ethercat轉profient網關搭配機器人精準控制

生產管理系統通過網關與裝配機器人連接&#xff0c;加快航空器機身的裝配速度&#xff0c;減少人為誤差。 航空制造對裝配線的精度和效率有著極高的要求。某航空制造廠使用的耐達訊Profinet轉EtherCAT協議網關NY-PN-ECATM&#xff0c;將其生產管理系統與裝配機器人連接&#xf…

什么是MySql的主從復制(主從同步)?

主頁還有其他面試題總結&#xff0c;有需要的可以去看一下&#xff0c;喜歡的就留個三連再走吧~ 1.什么是MySql的主從復制原理&#xff1f; 主從復制的核心就是二進制binlog&#xff08;DDL&#xff08;數據定義語言&#xff09;語句和DML&#xff08;數據操縱語言&#xff09…

自然語言處理:初識自然語言處理

介紹 大家好&#xff0c;博主又來給大家分享知識了。從這次開始&#xff0c;博主給大家分享自然語言處理這個領域的內容。這也是博主非常感興趣的研究領域。 最開始&#xff0c;博主計劃在自然語言處理系列的第一篇博文中&#xff0c;和大家聊聊文本規范化這個話題。畢竟在自…

【保姆級視頻教程(二)】YOLOv12訓練數據集構建:標簽格式轉換-劃分-YAML 配置 避坑指南 | 小白也能輕松玩轉目標檢測!

【2025全站首發】YOLOv12訓練數據集構建&#xff1a;標簽格式轉換-劃分-YAML 配置 避坑指南 | 小白也能輕松玩轉目標檢測&#xff01; 文章目錄 1. 數據集準備1.1 標簽格式轉換1.2 數據集劃分1.3 yaml配置文件創建 2. 訓練驗證 1. 數據集準備 示例數據集下載鏈接&#xff1a;P…

【人工智能】藍耘智算平臺盛大發布DeepSeek滿血版:開創AI推理體驗新紀元

&#x1f4dd;個人主頁&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; ? 藍耘智算平臺 藍耘智算平臺核心技術與突破元生代推理引擎快速入門&#xff1a;三步調用大模型接口&#xff0c;OpenAI SDK無縫兼容實戰用例文…

【網絡編程】幾個常用命令:ping / netstat / xargs / pidof / watch

ping&#xff1a;檢測網絡聯通 1. ping 的基本功能2. ping 的工作原理3. ping 的常見用法4. ping 的輸出解釋5. ping 的應用場景6. 注意事項 netstat&#xff1a;查看網絡狀態 1. netstat 的基本功能2. 常見用法3. 示例4. 輸出字段解釋5. netstat 的替代工具6. 注意事項 xargs&…

【C++】:STL詳解 —— list類

目錄 list的概念 list的構造函數 list的大小 size() resize() empty() list的插入 push_front()和emplace_front() push_back()和emplace_back() insert()和emplace() list的刪除 pop_front() pop_back() erase() remove() remove_if() unique() clear()…