(二分查找)Leetcode34. 在排序數組中查找元素的第一個和最后一個位置+74. 搜索二維矩陣

首先要明確二分查找算法如何實現,是采用左閉右閉還是左閉右開

左閉右閉

第?種寫法,我們定義?target?是在?個在左閉右閉的區間?,也就是[left, right]?(這個很重要?常重要)

區間的定義這就決定了?分法的代碼應該如何寫,因為定義target[left, right]區間,所以有如下兩點:

while (left <= right)?要使??<=?,因為left == right是有意義的,所以使??<=

if (nums[middle] > target) right?要賦值為?middle - 1,因為當前這個nums[middle]?定不是target,那么接

下來要查找的左區間結束下標位置就是?middle - 1

左開右閉

如果說定義?target?是在?個在左閉右開的區間?,也就是[left, right)?,那么?分法的邊界處理?式則截然不同。

有如下兩點:

while (left < right),這?使??< ,因為left == right在區間[left, right)是沒有意義的

if (nums[middle] > target) right?更新為?middle,因為當前nums[middle]不等于target,去左區間繼續尋

找,?尋找區間是左閉右開區間,所以right更新為middle,即:下?個查詢區間不會去?較nums[middle]

復雜度:對于長度為n的數組,最壞情況下需要進行log?n次比較操作。每次操作的時間復雜度為O(1),因此總的時間復雜度為對數階O(log n)

74. 搜索二維矩陣

74. 搜索二維矩陣 - 力扣(LeetCode)

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""m=len(matrix)#行n=len(matrix[0])#列#每一個編號可以為n*行號+列號left=0right=m*n-1while(left<=right):middle=(left+right)/2loclm,locrm=middle/n,middle-middle/n*n#loclm,locrm=middle//n,middle%nif matrix[loclm][locrm]==target:return Trueelif matrix[loclm][locrm]>target:right=middle-1else:left=middle+1return False   

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

34. 在排序數組中查找元素的第一個和最后一個位置 - 力扣(LeetCode)

相當于找一個框可以包住target數組,比如[5,7,7,8,8,10]target=8的例子就是希望能找到[7,8,8,10]這個框

尋找target在數組里的左右邊界,有如下三種情況:

  • 情況一:target 在數組范圍的右邊或者左邊,例如數組{3, 4, 5},target為2或者數組{3, 4, 5},target為6,此時應該返回{-1, -1}
  • 情況二:target 在數組范圍中,且數組中不存在target,例如數組{3,6,7},target為5,此時應該返回{-1, -1}
  • 情況三:target 在數組范圍中,且數組中存在target,例如數組{3,6,7},target為6,此時應該返回{1, 1}

這三種情況都考慮到,說明就想的很清楚了。

接下來,在去尋找左邊界,和右邊界了。

采用二分法來去尋找左右邊界,兩個二分來尋找左邊界和右邊界。

代碼隨想錄

為了避免上面的情況,所以需要初始化為-2而不是-1

rightborder=-2,leftborder=-2

class Solution(object):def searchRange(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""left=0right=len(nums)-1#左閉右閉查找方式#相當于找一個框可以包住target數組,比如[5,7,7,8,8,10]target=8的例子就是希望能找到[7,8,8,10]這個框rightborder=-2leftborder=-2#leftborder查找while left<=right:middle=(left+right)/2if target>nums[middle]:left=middle+1elif target<=nums[middle]:right=middle-1#這里更新跟隨等號走,并且更新為right而不是middleleftborder=right#rightborder查找#重新初始化left=0right=len(nums)-1while left<=right:middle=(left+right)/2if target>=nums[middle]:left=middle+1rightborder=leftelif target<nums[middle]:right=middle-1if rightborder ==-2 or leftborder ==-2:return [-1,-1]#區間長度至少為2elif rightborder-leftborder>1:return [leftborder+1,rightborder-1]else:return [-1,-1]

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

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

相關文章

損失函數,及其優化方法

什么是損失函數&#xff1f;損失函數&#xff0c;也稱為代價函數&#xff0c;是一個用來??衡量機器學習模型預測結果與真實值之間差距??的函數。損失函數的優化方法有哪些&#xff0c;各自優缺點是什么&#xff0c;他們的應用范圍是什么&#xff1f;方法類別代表算法核心思…

pyqt+Python證件號智能校驗工具

目錄 一、引言 二、GUI界面設計 1.相關提示 2.效果演示 3.界面設計.py 三、主要程序詳解 1.導入相關模塊 2.初始化設置 3.校驗過程 四、總程序代碼 一、引言 在數字化轉型加速的背景下&#xff0c;證件信息核驗已成為金融、政務、安防等領域的剛需。傳統人工校驗存在…

主流技術棧 NestJS、TypeScript、Node.js版本使用統計

&#x1f4ca; 2024年主流技術棧版本使用統計&#x1f527; TypeScript 采用情況全球采用率: 38.5% 的開發者使用 TypeScript&#xff08;Stack Overflow 2024&#xff09;增長趨勢: 從 2017年的 12% 增長到 2024年的 35%&#xff08;JetBrains 調研&#xff09;TypeScript vs …

Techub News 與 TOKENPOST 達成戰略合作以推動中韓 Web3 資訊互通

Techub News 消息&#xff0c;香港 Web3 媒體 Techub News 與韓國區塊鏈媒體 TOKENPOST 達成戰略合作。TOKENPOST 將開設香港內容板塊&#xff0c;由 Techub News 提供本地化行業資訊&#xff1b;同時 Techub News 將推出韓國內容專欄&#xff0c;內容源由 TOKENPOST 支持。這一…

Java面試實戰系列【JVM篇】- JVM內存結構與運行時數據區詳解(私有區域)

文章目錄一、前言1.1 什么是JVM內存結構1.2 JVM內存結構與Java內存模型的區別1.3 為什么面試官愛問JVM內存結構二、JVM運行時數據區總覽2.1 運行時數據區域劃分2.2 線程私有區域 vs 線程共享區域三、線程私有區域詳解3.1 程序計數器&#xff08;PC Register&#xff09;3.1.1 定…

鴻蒙中使用極光推送

官方給出的步驟是對的&#xff0c;就是一時不知道從何下手&#xff0c;自己整了下&#xff0c;按照這個來就行 1.步驟 打開 APP 通知功能 1.先按照這個頁面進行配置SDK 集成指南 - 極光文檔&#xff0c;主要就是下載極光sdk&#xff0c;然后在AGC里開通推送服務&#xff0c;配…

ruoyi_wvp流媒體[海康 大華 GB1812 onvif rtsp]

ZLMediaKitxiaz: https://download.csdn.net/download/jinhuding/91775096 webrtc: https://download.csdn.net/download/jinhuding/91764243 yoloonnx(v3,v7,v8s,v9c)&#xff1a;https://download.csdn.net/download/jinhuding/91775170 項目部署步驟 1.后端目錄結構 2.前端…

強化學習筆記(二):有限馬爾可夫決策過程(一)

有限馬爾可夫決策過程 基本概念 多臂老虎機僅涉及評價性反饋&#xff0c;即動作的即時獎勵&#xff0c;估計每個動作 aaa 的價值 q?(a)q_*(a)q??(a)。 有限馬爾可夫決策過程&#xff08;Finite MDP&#xff09;引入了關聯性因素&#xff0c;即在不同狀態&#xff08;情境&am…

Maven項目中settings.xml終極優化指南

文章目錄1. 基礎優化2. 鏡像源優化&#xff08;國內推薦&#xff09;3. 插件倉庫優化4. 并行構建提升 30%-80%5. 下載可靠性優化6. CI/CD 環境優化7. 進階&#xff1a;依賴鎖定與預下載8. 實現效果Maven settings.xml 終極優化指南&#xff0c;重點是&#xff1a;構建速度提升、…

RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd 函數在STM32的標準外設庫中扮演著“電源開關”的角色。要理解這個函數&#xff0c;我們需要明白STM32微控制器的幾個關鍵概念&#xff1a;1. 外設時鐘與低功耗設計STM32內部有非常多的外設&#xff0c;如GPIO&#xff08;A, B, C...D&#xff09;、USAR…

用大語言模型實現語音到語音翻譯的新方法:Scheduled Interleaved Speech-Text Training

用大語言模型實現語音到語音翻譯的新方法:Scheduled Interleaved Speech-Text Training 在人工智能領域,語音到語音翻譯(Speech-to-Speech Translation, S2ST)一直是極具挑戰性的任務。傳統的做法是將語音識別、文本翻譯和語音合成三個步驟串聯起來,而近年來,端到端的S2…

LLM學習:langchain架構——模型IO

1、什么是模型IO模型 I/O&#xff08;Model I/O&#xff09; 是 LangChain 框架中最核心的模塊之一&#xff0c;負責處理與語言模型&#xff08;LLM&#xff09;交互的輸入構建、模型調用和輸出解析全流程。它主要分為三個模塊&#xff1a;Prompts&#xff08;輸入構建&#xf…

Windows系統下python新一代三方庫管理工具uv及VSCode配置

python新一代三方庫管理工具uv uv是什么&#xff1f; uv是用RUST語言寫的一個python三方庫和項目管理工具&#xff0c;詳見官網&#xff08;uv&#xff09;。 uv的安裝 官網上提供了兩種安裝方式&#xff0c;第一種需要在PS終端里運行一下命令進行安裝&#xff1a; powersh…

Node.js 多版本管理工具 nvm 的安裝與使用教程(含鏡像加速與常見坑)

適用人群&#xff1a;前端/后端/全棧開發者&#xff0c;Mac/Linux/Windows&#xff08;nvm-windows&#xff09;用戶&#xff1b;需要在多項目間快速切換 Node 版本、或在國內網絡環境下穩定安裝 Node。一、為什么要用 nvm&#xff1f;一機多版本&#xff1a;不同項目依賴不同 …

Unity Shader unity文檔學習筆記(二十一):幾種草體的實現方式(透明度剔除,GPU Instaning, 曲面細分+幾何著色器實現)

1.透明度剔除&#xff08;性能較差&#xff0c;不同顏色時需要不同材質會導致多個dc&#xff09; clip(_Color.a - _Cutoff); 傳入值為0時 剔除 類似的草體效果&#xff1a; 2.GPU Instaning(可以自定義一次性合批最多1023個&#xff0c;能夠傳遞顏色值等等&#xff08;做草…

UX 設計入門終章:讓洞察落地!用用戶流程圖、IA 和旅程圖,設計用戶與產品的互動故事

歡迎來到本系列課程的最后一課。 如果你把之前的學習比作是繪制一份建筑藍圖&#xff0c;那么今天&#xff0c;你將根據自己收集到的所有用戶數據&#xff0c;描繪出空間布局&#xff08;用戶流程圖&#xff09;、理清結構關系&#xff08;信息架構&#xff09;&#xff0c;并最…

【RAG知識庫實踐】向量數據庫VectorDB

一、概述 1.1 什么是向量庫 向量數據庫是一種專門為存儲、索引和查詢高維向量數據而優化的數據庫系統。與傳統的關系型數據庫不同,向量數據庫將數據映射到向量空間中,使得數據的相似性計算、聚類、分類和檢索變得更加高效和精確 向量數據庫一般包括以下幾個部分:索引、查詢…

EasyExcel 3.x 導出動態表頭,動態sheet頁

動態導出sheet頁Overridepublic void exportAnswerListV1(HttpServletResponse response, SmtSurveyUserAnswerRecord smtSurveyUserAnswerRecord) {// 1. 準備問卷數據String formType smtSurveyUserAnswerRecord.getFormType();if (ObjectUtil.isEmpty(formType)) {throw ne…

重學JS-004 --- JavaScript算法與數據結構(四)JavaScript 表單驗證

文章目錄HTMLlabel 屬性input 屬性button 屬性fieldset 屬性select 屬性option 屬性div 屬性scriptgetElementByIdquerySelectorAllnull循環模版文字函數事件監聽器regex舉例StringMathArrayHTML HTML 屬性應該用雙引號引起來。 label 屬性 for“” input 屬性 id“” typ…

本地搭建 Redis/MySQL 并配置國內鏡像加速(Docker/原生安裝 | macOS/Linux/Windows)

適用人群&#xff1a;前端/后端/數據/測試工程師&#xff1b;需要在單機上快速搭建 Redis 與 MySQL 的開發環境&#xff1b;同時在國內網絡環境下加速下載&#xff08;容器鏡像、系統包倉庫&#xff09;。文章結構&#xff1a;一圖流 → TL;DR → Docker 方式 → 原生安裝&…