藍橋杯算法精講:二分查找實戰與變種解析

適合人群:藍橋杯備考生 | 算法競賽入門者 | 二分查找進階學習者

目錄

一、二分查找核心要點

1. 算法思想

2. 適用條件

3. 算法模板

二、藍橋杯真題實戰

例題:分巧克力(藍橋杯2017省賽)

三、二分查找變種與技巧

1. 查找左邊界

2. 查找右邊界

四、常見錯誤與注意事項

五、藍橋杯進階練習題


一、二分查找核心要點

1. 算法思想

二分查找(Binary Search)是一種在有序序列中快速定位目標的算法,通過不斷縮小搜索范圍,將時間復雜度從O(n)降至O(log n)。

2. 適用條件
  • 有序性:數據必須有序(升序或降序)

  • 單調性:問題的解空間具有單調性(如求最大值最小、最小值最大)

3. 算法模板
def binary_search(arr, target):  left, right = 0, len(arr) - 1  # 初始化左右指針  while left <= right:  mid = left + (right - left) // 2  # 防止整數溢出  if arr[mid] == target:  return mid  # 找到目標,返回索引  elif arr[mid] < target:  left = mid + 1  # 目標在右半部分  else:  right = mid - 1  # 目標在左半部分  return -1  # 未找到  

二、藍橋杯真題實戰

例題:分巧克力(藍橋杯2017省賽)

題目描述
有N塊巧克力,每塊大小為H[i]×W[i]。需切割出K塊大小相同的正方形,求最大邊長。

問題分析

  • 單調性:邊長越大,能切出的塊數越少

  • 二分目標:尋找滿足塊數≥K的最大邊長

代碼實現

def max_chocolate_size():  N, K = map(int, input().split())  H = []  W = []  for _ in range(N):  h, w = map(int, input().split())  H.append(h)  W.append(w)  # 二分范圍:最小1,最大巧克力邊長上限  left, right = 1, max(max(H), max(W))  ans = 0  while left <= right:  mid = (left + right) // 2  cnt = 0  # 當前邊長能切出的總塊數  for i in range(N):  cnt += (H[i] // mid) * (W[i] // mid)  if cnt >= K:  # 提前終止循環  break  if cnt >= K:  ans = mid  # 記錄可行解  left = mid + 1  # 嘗試更大的邊長  else:  right = mid - 1  # 邊長過大,縮小范圍  return ans  print(max_chocolate_size())  

代碼解析

  1. 二分初始化:左邊界為1,右邊界取所有巧克力的最大邊長

  2. 計算塊數:對每塊巧克力計算能切出的塊數,累加直至超過K

  3. 調整邊界:根據塊數是否滿足條件,動態調整左右邊界

三、二分查找變種與技巧

1. 查找左邊界

場景:數組中存在重復元素,找到第一個等于target的位置。

def left_bound(arr, target):  left, right = 0, len(arr) - 1  while left <= right:  mid = left + (right - left) // 2  if arr[mid] < target:  left = mid + 1  else:  right = mid - 1  # 壓縮右邊界  # 檢查left是否越界或找到目標  return left if left < len(arr) and arr[left] == target else -1  
2. 查找右邊界

場景:找到最后一個等于target的位置。

def right_bound(arr, target):  left, right = 0, len(arr) - 1  while left <= right:  mid = left + (right - left) // 2  if arr[mid] <= target:  left = mid + 1  # 壓縮左邊界  else:  right = mid - 1  # 檢查right是否有效  return right if right >=0 and arr[right] == target else -1  

四、常見錯誤與注意事項

  1. 整數溢出:使用mid = left + (right - left) // 2而非(left + right)//2

  2. 邊界更新:確保每次循環邊界必然縮小,防止死循環

  3. 終止條件while left <= rightleft = mid + 1/right = mid -1配對使用

  4. 返回值驗證:最終結果需檢查是否有效(如索引是否越界)

五、藍橋杯進階練習題

  1. 數的范圍(模板題):藍橋杯題庫

  2. 旋轉數組的最小值(變種):藍橋杯2021省賽

  3. 在排序數組中查找元素的第一個和最后一個位置:LeetCode 34

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

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

相關文章

cmd命令查看電腦的CPU、內存、存儲量

目錄 獲取計算機硬件的相關信息的命令分別的功能結果展示結果說明獲取計算機硬件的相關信息的命令 wmic cpu get name wmic memorychip get capacity wmic diskdrive get model,size,mediaType分別的功能 獲取計算機中央處理器(CPU)的名稱 獲取計算機內存(RAM)芯片的容量…

SCI論文閱讀指令(特征工程)

下面是一個SCI論文閱讀特征工程V3.0&#xff0c;把指令輸入大模型中&#xff0c;并上傳PDF論文&#xff0c;就可以幫你快速閱讀論文。 優先推薦kimi&#xff0c;當然DeepSeek、QwQ-32B等大語言模型也可以。測試了一下總結的還不錯&#xff0c;很詳細。 請仔細并深入地閱讀所提…

如何監控 SQL Server

監控 SQL Server 對于維護數據庫性能、確保數據可用性和最大限度地減少停機時間至關重要。隨著企業越來越依賴數據驅動的決策&#xff0c;高效的SQL Server監控策略能顯著提升組織生產力和用戶滿意度。 為什么要監控 SQL Server SQL Server 是許多關鍵應用程序的支柱&#xf…

python腳本處理excel文件

1.對比perl和python 分別嘗試用perl和python處理excel文件&#xff0c;發現perl的比較復雜&#xff0c;比如說read excel就有很多方式 Spreadsheet::Read use Spreadsheet::ParseExcel 不同的method&#xff0c;對應的取sheet的cell方式也不一樣。更復雜的是處理含有中文內…

3、pytest實現參數化

在 pytest 中&#xff0c;參數化&#xff08;parametrization&#xff09;是一種強大的功能&#xff0c;可以讓你用不同的輸入數據重復執行同一個測試函數。這種功能非常有用&#xff0c;可以幫助你顯著減少重復代碼并提高測試覆蓋率。 參數化的主要作用是&#xff1a; 測試多…

Cursor:超強AI變成神器

是一個強大的 AI 編程助手&#xff0c;可以幫助開發者快速地編寫、編輯和討論代碼&#xff0c;支持 Python、Java、C# 等多種編程語言&#xff0c;并且可以與 GitHub、Slack 等平臺集成。 Cursor 是什么&#xff1f; 想象一下&#xff0c;你有一個能把你的創意變成現實的造夢 …

畫秒殺系統流程圖

秒殺系統流程圖 秒殺系統關鍵點 高并發處理: 使用網關&#xff08;如 Nginx&#xff09;進行流量限流&#xff0c;避免過載。分布式鎖或 Redis 原子操作控制并發。 活動狀態檢查: Redis 存儲活動狀態&#xff08;如 seckill:activity:1:status&#xff09;&#xff0c;快速…

【js逆向入門】圖靈爬蟲練習平臺 第九題

地址&#xff1a;aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvOS8 f12進入了debugger&#xff0c;右擊選擇一律不在此處暫停&#xff0c; 點擊繼續執行 查看請求信息 查看載荷&#xff0c;2個加密參數&#xff0c;m和tt 查看啟動器&#xff0c;打上斷點 進來 往…

Vue中的狀態管理器Vuex被Pinia所替代-上手使用指南

Pinia.js 是新一代的狀態管理器&#xff0c;由 Vue.js團隊中成員所開發的&#xff0c;因此也被認為是下一代的 Vuex&#xff0c;即 Vuex5.x&#xff0c;在 Vue3.0 的項目中使用也是備受推崇 Pinia.js 有如下特點&#xff1a; 完整的 typescript 的支持&#xff1b;足夠輕量&…

向量數據庫學習筆記(1) —— 基礎概念

一、 嵌入模型 Embedding Models 嵌入模型是將復雜數據&#xff08;如文本、圖像、音頻等&#xff09;轉換為向量表示的機器學習模型 1. 核心概念 嵌入(Embedding)&#xff1a;將高維、非結構化的數據映射到低維、稠密的向量空間 向量表示&#xff1a;輸出固定長度的數值向量…

[NO-WX179]基于springboot+微信小程序的在線選課系統

[NO-WX179]基于springboot微信小程序的在線選課系統 1、管理員角色&#xff08;web端&#xff09;&#xff1a;2、教師角色&#xff08;web端&#xff09;&#xff1a;3、用戶角色&#xff08;小程序或web端&#xff09;&#xff1a;4、部分運行截圖管理端--教師管理管理端--學…

2025年滲透測試面試題總結-某 長亭(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 長亭 一、Spring SpEL表達式注入漏洞 1. 技術原理 2. 利用條件 3. 攻擊方法 4. 防御策略 二、Jav…

conda環境下解決gitk亂碼模糊

關鍵詞 conda、git、gitk、git gui、模糊、linux、亂碼 現象 操作系統&#xff1a;ubuntu24.04 conda版本&#xff1a;25.1.1 正常的終端里gitk顯示不會模糊 但是在conda創建的python虛擬環境中使用gitk&#xff0c;字體開始變得模糊不清 分析 根據deepseek的原因原因分析…

【C++項目實戰】:基于正倒排索引的Boost搜索引擎(1)

1. 項目的相關背景與目標 針對boost網站沒有搜索導航功能&#xff0c;為boost網站文檔的查找提供搜索功能 站內搜索&#xff1a;搜索的數據更垂直&#xff0c;數據量小 類似于cplusplus.com的搜索 2.搜索引擎的相關宏觀原理 3.技術棧和項目環境 技術棧&#xff1a;C/C&am…

汽車高級駕駛輔助系統應用存儲MRAM

高級駕駛輔助系統和先進的互連航空電子技術等應用要求元件能夠承受惡劣的環境條件&#xff0c;并具有較高的耐用性。閃存雖然在某些條件下性能可靠&#xff0c;但在耐用性方面存在局限性&#xff0c;因此無法滿足這些嚴格的要求。 在實時傳感器數據處理或高可靠性通信等對時間…

藍橋-班級活動

問題描述 小明的老師準備組織一次班級活動。班上一共有 n 名 (n 為偶數) 同學&#xff0c;老師想把所有的同學進行分組&#xff0c;每兩名同學一組。為了公平&#xff0c;老師給每名同學隨機分配了一個 n 以內的正整數作為 id&#xff0c;第 i 名同學的 id 為 ai?。 老師希望…

MongoDB 的索引是提高查詢性能的核心機制,類似于傳統關系型數據庫的索引。以下是對 MongoDB 索引的詳細說明:

MongoDB 的索引是提高查詢性能的核心機制&#xff0c;類似于傳統關系型數據庫的索引。以下是對 MongoDB 索引的詳細說明&#xff1a; 一、索引基礎 1. 索引的作用 加速查詢&#xff1a;通過索引快速定位數據&#xff0c;避免全集合掃描&#xff08;COLLSCAN&#xff09;。 排…

深入理解指針(1)(C語言版)

文章目錄 前言一、內存和地址1.1 內存1.2 究竟該如何理解編址 二、指針變量和地址2.1 取地址操作符&2.2 指針變量和解引用操作符*2.2.1 指針變量2.2.2 如何拆解指針類型2.2.3 解引用操作符 2.3 指針變量的大小 三、指針變量類型的意義3.1 指針的解引用3.2 指針-整數3.3 voi…

【視頻】m3u8相關操作

【視頻】郭老二博文之:圖像視頻匯總 1、視頻文件轉m3u8 1.1 常用命令 1)默認只保留 5 個ts文件 ffmpeg -i input.mp4 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls stream1.m3u82)去掉音頻 -an,保留全部ts文件 ffmpeg -i input.mp4 -vf scale=640:480 -an -…

AWS CloudWatch 實戰:構建智能監控與自動化運維體系

摘要&#xff1a;本文通過實際案例&#xff0c;詳細講解如何利用AWS CloudWatch實現云端資源的實時監控、日志分析與自動化運維&#xff0c;助力企業提升系統穩定性與運維效率 一、場景痛點分析 某電商平臺遷移至AWS后面臨三大挑戰&#xff1a; 故障響應滯后&#xff1a;服務器…