【C++】二分查找:在排序數組中查找元素的第一個和最后一個位置

1.題目

難點:要求時間復雜度度為O(logn)。

2.算法思路

需要找到左邊界和右邊界就可以解決問題。

題目中的數組具有“二段性”,所以可以通過二分查找的思想進行解題。

代碼:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int left1=0,right1=nums.size()-1;vector<int> v;if(nums.size()==0) return {-1,-1};//處理邊界情況//找左邊界while(left1<right1){int mid=left1+(right1-left1)/2;if(nums[mid]<target) left1=mid+1;if(nums[mid]>=target) right1=mid;}if(nums[left1]==target) v.push_back(left1);else return {-1,-1};//找右邊界int left2=0,right2=nums.size()-1;while(left2<right2){int mid=left2+(right2-left2+1)/2;if(nums[mid]<=target) left2=mid;if(nums[mid]>target) right2=mid-1;}if(nums[left2]==target) v.push_back(left2);return v;}
};

細節問題:

首先考慮邊界情況,數組為空先判斷一下。

然后就是循環條件不能寫等于,否則mid始終等于right(找左邊界時)/left(找右邊界時),會死循環。

還有找左邊界時,mid要向下取整,找有邊界時,mid要像上取整。否則只剩兩個值時,mid始終等于right(找左邊界時)/left(找右邊界時),會死循環。

3.運行結果

4.總結二分查找的模板

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

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

相關文章

Camunda BPM主要組件

Camunda BPM是使用java開發的,核心流程引擎運行在JVM里,純java庫,不依賴其他庫或者底層操作系統。可以完美地與其他java框架融合,比如Spring。除了核心流程引擎外,還提供了一系列的管理,操作和監控工具。 1,工作流引擎 既適用于服務或者微服務編排,也適用于人工任務管…

Leetcode42題:接雨水

1.題目描述 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 輸入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 輸出&#xff1a;6 解釋&#xff1a;上面是由數組 [0,1,0,2,1,0,1,…

hadoop節點添加與刪除測試

hadoop節點上下線 docker run -d --name hd1 -p 8888:8888 -p 2222:22 centos:basic init docker run -d --name hd2 -p 8889:8889 centos:basic init docker run -d --name hd3 centos:basic init# hosts echo "172.17.0.2 hadoop1 172.17.0.3 hadoop2 172.17.0.4 hadoo…

網絡協議:CSMA/CD 和 CSMA/CA

當多臺設備共享同一通信信道時&#xff0c;避免數據傳輸沖突至關重要。本文將探討兩種廣泛使用的協議&#xff1a;CSMA/CD&#xff08;Carrier Sense Multiple Access with Collision Detection&#xff09;和CSMA/CA&#xff08;Carrier Sense Multiple Access with Collision…

【C語言】二叉樹的實現

文章目錄 前言?一、二叉樹的定義&#x1f6b2;二、創建二叉樹&#x1f3a1;三、二叉樹的銷毀&#x1f389;四、遍歷二叉樹1. 前序遍歷2. 中序遍歷3. 后序遍歷4. 層序遍歷 &#x1f332;五、二叉樹的計算1. 計算二叉樹結點個數2. 計算二叉樹葉子結點的個數3. 計算二叉樹的深度4…

一、Elasticsearch介紹與部署

目錄 一、什么是Elasticsearch 二、安裝Elasticsearch 三、配置es 四、啟動es 1、下載安裝elasticsearch的插件head 2、在瀏覽器&#xff0c;加載擴展程序 3、運行擴展程序 4、輸入es地址就可以了 五、Elasticsearch 創建、查看、刪除索引、創建、查看、修改、刪除文檔…

【MySQL】——并發控制

&#x1f4bb;博主現有專欄&#xff1a; C51單片機&#xff08;STC89C516&#xff09;&#xff0c;c語言&#xff0c;c&#xff0c;離散數學&#xff0c;算法設計與分析&#xff0c;數據結構&#xff0c;Python&#xff0c;Java基礎&#xff0c;MySQL&#xff0c;linux&#xf…

計算機畢業設計 | springboot+vue房屋租賃管理系統(附源碼)

1&#xff0c;緒論 1.1 課題來源 隨著社會的不斷發展以及大家生活水平的提高&#xff0c;越來越多的年輕人選擇在大城市發展。在大城市發展就意味著要在外面有一處安身的地方。在租房的過程中&#xff0c;大家也面臨著各種各樣的問題&#xff0c;比如需要費時費力去現場看房&…

oj項目后端分析

1.菜單管理 我們菜單管理有菜單表(sys_menu)&#xff0c;還有用戶角色表&#xff08;sys_role&#xff09;&#xff0c;菜單表是用于管理我們用戶所擁有的權限&#xff0c;不同的用戶所看到的頁面是不一樣的&#xff0c;由于一些用戶他能夠看到題庫管理和考題管理&#xff0c;還…

Anaconda Anaconda支持什么編程語言的環境配置

Anaconda是一個數據科學和機器學習的開發環境&#xff0c;它支持多種編程語言的環境配置&#xff0c;包括&#xff1a; Python&#xff1a;Anaconda默認安裝了Python和必需的Python庫&#xff0c;可以方便地進行Python編程和數據分析。 R&#xff1a;Anaconda也可以配置R語言環…

Aws EC2 + Aws Cli + Terraform

1 什么是 Terraform&#xff1f; Terraform 是由 HashiCorp 創建的“基礎架構即代碼”(Infrastructure-as-Code&#xff0c;IaC)開源工具。Terraform 的配置語言是 HashiCorp Configuration Language&#xff08;HCL&#xff09;&#xff0c;用來替代更加冗長的 JSON 和 XML 等…

SpringBoot注解--09--idea創建spring boot項目,java版本只能選擇17和21

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 idea創建spring boot項目1.問題描述2.原因3.解決方法方案一&#xff1a;升級JDK版本至17或更高方案二&#xff1a;替換Spring初始化的源https://start.aliyun.com i…

實時計算及異構計算隨筆筆記

3、異構計算的典型應用 異構計算并不神秘&#xff0c;目前已滲透各個領域&#xff0c;不僅是PC領域&#xff0c;也包括了手持移動設備領域、行業領域&#xff0c;甚至是云計算、分布式計算領域。事實上&#xff0c;異構計算至少在應用端&#xff08;前臺&#xff09;并不像它的…

Android 運行時權限

Android 6.0 及以后&#xff0c;如果你的應用需要用到一些危險權限&#xff0c;那么這些權限必須手動申請。 具體危險權限有哪些&#xff0c;可以通過下面這篇文章自行查詢到&#xff1a; 使用 adb 命令列出設備所有危險權限 例如&#xff0c;讀寫文件就涉及到兩個危險權限&am…

Unity 中獲取調用者方法名

介紹 在 Unity 開發中&#xff0c;有時需要在代碼中獲取當前方法的調用者方法名&#xff0c;以便進行日志記錄、調試等操作。本教程將詳細介紹如何使用 C# 中的 StackTrace 類來實現這一功能&#xff0c;并將其封裝成一個便捷的工具類&#xff0c;以方便在項目中的任何地方…

ES的安裝以及配置+ik分詞

環境&#xff1a;windows10、ES&#xff08;8.13.3&#xff09;、Kibana&#xff08;8.13.3&#xff09;、Logstash&#xff08;8.13.3&#xff09;、ik&#xff08;8.13.3&#xff09; 1.下載安裝ES Download Elasticsearch | ElasticDownload Elasticsearch or the complet…

AI預測體彩排3采取888=3策略+和值012路一縮定乾坤測試5月26日預測第2彈

今天繼續基于8883的大底進行測試&#xff0c;昨天的預測已成功命中&#xff01;今天繼續測試&#xff0c;按照排三前面的規律&#xff0c;感覺要出對子了&#xff0c;所以本次預測不再殺對子&#xff0c;將采用殺一個和尾來代替。好了&#xff0c;直接上結果吧~ 首先&#xff0…

mongoengine,一個非常實用的 Python 庫!

更多Python學習內容&#xff1a;ipengtao.com 大家好&#xff0c;今天為大家分享一個超酷的 Python 庫 - mongoengine。 Github地址&#xff1a;https://github.com/MongoEngine/mongoengine 在現代應用程序開發中&#xff0c;NoSQL數據庫因其靈活性和高性能而廣受歡迎。MongoD…

軟件需求規范說明模板

每個軟件開發組織都會為自己的項目選用一個或多個標準的軟件需求規范說明模板。有許多軟件需求規范說明模板可以使用(例如ISO/IEC/IEEE2011;Robertson and Robertson2013)。如果你的組織要處理各種類型或規模的項目&#xff0c;例如新的大型系統開發或是對現有系統進行微調&…

concurrency 并行編程

Goroutine go語言的魅力所在&#xff0c;高并發。 線程是操作系統調度的一種執行路徑&#xff0c;用于在處理器執行我們在函數中編寫的代碼。一個進程從一個線程開始&#xff0c;即主線程&#xff0c;當該線程終止時&#xff0c;進程終止。這是因為主線程是應用程序的原點。然后…