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

解題思路:

? ? ? ? 1.獲取信息:

? ? ? ? ? ? ? ? 給定一個非遞減順序的整數數組,要求找出給定元素在該數組中從左往右第一次出現的位置和最后一個出現的位置,即:最右邊的位置和最左邊的位置

? ? ? ? ? ? ? ? 如果不存在該元素,則返回{ -1 , -1 }

? ? ? ? ? ? ? ? 限制條件:時間復雜度必須是O(log N)

? ? ? ? 2.分析題目:(因為這道題我只寫出了一種方法,所以我會在這個環節就開始講解思路了)

? ? ? ? ? ? ? ? 看到這個復雜度,讓我想到了二分查找法,那么該怎么用二分查找法來解出這道題呢?

? ? ? ? ? ? ? ? 我們想到,這個數組是一個非遞減順序的整數數組,所以

? ? ? ? ? ? ? ? 如果其中有我們要查找的那個元素,那么即使它存在多個,也會挨在一起

? ? ? ? ? ? ? ? 那我們只需先使用二分查找法找出那個元素,就可以確定我們要找出的那個元素聚集在哪個位置了,這個時候,只需找出這個聚集地的末端和首端即可

? ? ? ? ? ? ? ? 現在來說,當我們第一次查找到了我們要找的那個元素時,此時無非就三種情況

? ? ? ? ? ? ? ? (1)查找到了首端

? ? ? ? ? ? ? ? ? ? ? ? 存下首端位置后,接著向后查找末端位置即可

? ? ? ? ? ? ? ? (2)查找到了末端

? ? ? ? ? ? ? ? ? ? ? ? 存下末端位置后,接著向前查找首端位置即可

? ? ? ? ? ? ? ? (3)查找到了中間

? ? ? ? ? ? ? ? ? ? ? ? 此時要進行兩次查找了,分別向前查找首端和向后查找末端即可

? ? ? ? ? ? ? ? 以上就是本題的思路,代碼會在最后一個環節

? ? ? ? 3.示例查驗:

? ? ? ? ? ? ? ? 示例1,示例2和示例3:你可以根據示例來驗證一下上述思路是否正確

? ? ? ? 4.嘗試編寫代碼:

? ? ? ? ? ? ? ? (1)二分查找法

? ? ? ? ? ? ? ? ? ? ? ? 思路:就如分析題目的環節所說,你可以結合我的代碼來進行理解,以下是完整代碼

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int begin=0,end=nums.size()-1;//開始第一次查找vector<int>res(2,-1);//準備好存儲結果的容器while(begin<=end){int mid=(begin+end)/2;if(nums[mid]==target){//查找到了那個元素int newbegin1=mid,newend1=end;while(newbegin1<newend1){//向后查找末端位置if(newend1-newbegin1==1){newbegin1=(nums[newend1]==target)?newend1:newbegin1;break;}int newmid=(newbegin1+newend1)/2;if(nums[newmid]==target)newbegin1=newmid;else newend1=newmid-1;}res[1]=newbegin1;int newbegin2=begin,newend2=mid;while(newbegin2<newend2){//向前查找前端位置if(newend2-newbegin2==1){newend2=(nums[newbegin2]==target)?newbegin2:newend2;break;}int newmid=(newbegin2+newend2)/2;if(nums[newmid]==target)newend2=newmid;else newbegin2=newmid+1;}res[0]=newend2;return res;}else if(nums[mid]<target)begin=mid+1;//二分查找法的老步驟,就不過多闡述else if(nums[mid]>target)end=mid-1;}return res;//如果沒有查找到就直接返回結果{-1,-1}}
};

以上就是這次題解的全部內容,希望能夠幫到你,讓你有所收獲

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

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

相關文章

低秩分解的本質是通過基矩陣和系數矩陣的線性組合,以最小的存儲和計算代價近似表示復雜矩陣

低秩分解的本質是通過基矩陣和系數矩陣的線性組合&#xff0c;以最小的存儲和計算代價近似表示復雜矩陣 flyfish 一、最基礎起點&#xff1a;數字與數組 數字與標量&#xff08;Scalar&#xff09; 單獨的數&#xff0c;如 1 , 2.5 , ? 3 1, 2.5, -3 1,2.5,?3&#xff0c;…

SVN本地使用--管理個人倉庫

1.SVN官網下載鏈接 Download – TortoiseGit – Windows Shell Interface to Git 一路安裝即可&#xff0c;安裝后在桌面空白處右鍵菜單可以看到選項即安裝成功。 2.建立個人SVN數據庫 選擇一個磁盤新建一個文件夾&#xff0c;在文件夾中右鍵創建數據庫。 3.上傳文件到SVN…

Cloud Automation-Resource optimization, cleanup and dashboard

如何使用Automation Account Run Book實現自動化 1. 什么是 Runbook&#xff1f; Azure Automation Account 中的 Runbook 是一套自動化腳本&#xff0c;用于在云中或混合環境中執行常規任務。Runbook 支持多種腳本語言&#xff0c;包括 PowerShell、Python、Graphical、Powe…

leetcode_3583 統計特殊三元組

1. 題意 求給定數組中下標 ( i , j , k ) (i,j,k) (i,j,k)的對數&#xff0c; 且滿足 i < j < k , 2 a [ j ] a [ i ] a [ k ] i < j <k,2 a[j]a[i]a[k] i<j<k,2a[j]a[i]a[k] 2. 題解 2.1 枚舉中間 三個數枚舉中間那個數&#xff0c;再存前綴和后綴個數…

Sentinel(一):Sentinel 介紹和安裝

一、Sentinel 介紹 1、什么是 Sentinel&#xff1f; 一句話來說&#xff0c;Sentinel就是&#xff1a;分布式系統的流量衛兵&#xff08;官網&#xff09;。 隨著微服務的普及&#xff0c;服務調用的穩定性變得越來越重要。Sentinel以“流量”為切入點&#xff0c;在流量 控制…

pyspark 初試

1、安裝jdk sudo apt-get install openjdk-17-jdk 2、安裝spark curl -o spark.tgz https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-4.0.0/spark-4.0.0-bin-hadoop3.tgz tar -xvf spark.tgz mv spark-4.0.0-bin-hadoop3 /opt/spark修改 /etc/profile 添加 exp…

深入解析select模型:FD_SET機制與1024限制的終極指南

在Linux網絡編程中&#xff0c;select函數是最經典的I/O多路復用技術之一&#xff0c;但其核心機制FD_SET的1024限制常成為高并發系統的瓶頸。本文將深入剖析FD_SET實現原理&#xff0c;并提供突破限制的實戰方案。 一、FD_SET底層結構解析 FD_SET本質是固定長度的位圖數組&am…

C函數基礎.go

前言&#xff1a; 在Go語言中&#xff0c;函數是構成程序的基本模塊&#xff0c;它封裝了一段具有特定功能的代碼&#xff0c;使得代碼更易讀&#xff0c;更易維護和重用。熟練掌握函數的定義、調用以及相關特性是成為Go語言開發者的必經之路。 目錄 函數定義&#xff1a;給代…

什么是池化

池化是深度學習中用于降低數據維度、提取核心特征的一種操作&#xff0c;主要應用于卷積神經網絡&#xff08;CNN&#xff09;。其核心思想是通過對局部區域進行聚合統計&#xff08;如取最大值、平均值&#xff09;&#xff0c;保留關鍵信息的同時減少計算量。 池化的作用 降維…

C++ 性能分析工具:Valgrind 與 perf

在 C 開發中&#xff0c;性能優化是提升軟件質量的關鍵環節。內存泄漏和 CPU 資源消耗是最常見的性能瓶頸&#xff0c;而 Valgrind 和 perf 作為專業的性能分析工具&#xff0c;能幫助開發者精準定位這些問題。下面將從工具原理、使用方法、實戰案例等方面進行詳細介紹。 一、…

ABP VNext + MongoDB 數據存儲:多模型支持與 NoSQL 擴展

&#x1f680; ABP VNext MongoDB 數據存儲&#xff1a;多模型支持與 NoSQL 擴展&#xff08;生產級實踐&#xff09; 目錄 &#x1f680; ABP VNext MongoDB 數據存儲&#xff1a;多模型支持與 NoSQL 擴展&#xff08;生產級實踐&#xff09;&#x1f3af; 引言&#x1f9f0…

Cursor Rules 的核心定位與作用 DevOps是

Cursor Rules 是 AI 編程工具 Cursor IDE 中的核心功能&#xff0c;用于約束 AI 生成代碼的行為&#xff0c;確保其符合項目規范、編碼風格或特定技術需求。它本質上是一套持久化、可復用的指令集&#xff0c;會動態插入到 AI 模型的上下文提示中&#xff0c;指導其生成代碼的邏…

Qt事件處理機制

事件的概念 在Qt中&#xff0c;以事件驅動UI工具集&#xff0c;包括信號和槽都依賴于Qt的事件處理機制。通常事件是由窗口系統或Qt自身產生的&#xff0c;用以響應所發生的各類事情。如&#xff1a;用戶按下并釋放鍵盤或鼠標、窗口縮放后重繪、定時器到時等。如下圖&#xff1…

【慧游魯博】【11】小程序端·游覽畫卷修改·支持圖片url格式·結合圖床上傳和加載·數據對接

文章目錄 需求修改細節前端主要修改點說明&#xff1a;前端傳遞格式 后端ArtifactItem 類&#xff1a;ScrollServiceImpl 類&#xff1a;修改 InfoPanel 結構重構 ScrollHorizontalRollComposer修改后的 ScrollHorizontalRollComposer移除冗余代碼修改總結 數據流圖片格式兼容性…

攻克SQL審核“最后堡壘”!PawSQL首發T-SQL存儲過程深度優化引擎

為什么存儲過程審核那么難&#xff1f; 存儲過程將數據操作邏輯固化在數據庫層&#xff0c;一次編譯、多次執行&#xff0c;既能大幅提升性能&#xff0c;也能通過權限隔離增強安全。然而&#xff0c;正因其邏輯復雜、分支眾多&#xff0c;存儲過程內部的 SQL 審核與優化常常成…

計算機網絡零基礎完全指南

目錄 ?? 什么是計算機網絡 生活中的類比 計算機網絡的本質 網絡的發展歷程 ?? 網絡IP詳解(重點) 1. IP地址是什么? 生活例子:IP地址就像門牌號 IP地址的格式 IP地址的二進制表示 2. IP地址的分類詳解 A類地址(大型網絡) B類地址(中型網絡) C類地址(小…

DL___線性神經網絡

1&#xff09;回歸&#xff08;regression&#xff09;是能為一個或多個自變量與因變量之間關系建模的一類方法。 在自然科學和社會科學領域&#xff0c;回歸經常用來表示輸入和輸出之間的關系。 2&#xff09;一般回歸是和預測有關&#xff0c;比如預測價格(房屋&#xff0c;…

WSL2安裝與使用(USB、GPU、虛擬機、圖形界面)

文章目錄 前言WSL2安裝&#xff08;手動安裝&#xff09;WSL2基礎使用VS Code與WSL2配合使用連接USB設備WSL2中使用GPU&#xff08;RTX5060Ti 16G&#xff09;與虛擬機兼容使用&#xff08;Virtual Box&#xff09;圖形與桌面環境WSL消失&#xff08;災難性故障&#xff09;問題…

uni-app項目實戰筆記16--實現頭部導航欄效果

先來看效果&#xff1a; 要求&#xff1a;頂部導航欄要始終固定在上方&#xff0c;不隨頁面上下拖動而消失。 代碼實現&#xff1a; 1.定義一個自定義導航欄組件&#xff1a;custom-nav-bar.vue&#xff0c;并寫入如下代碼&#xff1a; <template><view class"…

web3.js 核心包及子模塊

. 核心包 (web3) 功能:提供基礎連接、工具函數和核心功能。 包含子模塊: web3.eth - 以太坊區塊鏈交互 web3.utils - 輔助工具函數 web3.shh - Whisper 協議(已廢棄) web3.bzz - Swarm 去中心化存儲(已廢棄) web3.net - 網絡相關功能 web3.contract - 智能合約交互 web3.…