二分查找2

1. 山脈數組的峰頂索引(852)

題目描述:
在這里插入圖片描述
在這里插入圖片描述

算法原理:
根據題意我們可以將數組分為兩個部分,一個部分是arr[mid-1]<arr[mid],另一個部分為arr[mid-1]>arr[mid],此時不難發現我們可以將二分查找循環內的條件設置為上述條件,雖然此時會出現mid-1越界的問題,但是完全不用擔心,因為left和right下標分別從1和arr.length-2開始的,題目的意思就是山峰是不會出現在0和arr.length-1這兩個位置的,所以可以直接跳過。
代碼如下:

class Solution {public int peakIndexInMountainArray(int[] arr) {int left = 1, right = arr.length - 2;while (left < right) {int mid = left + (right - left + 1) / 2;if (arr[mid] > arr[mid - 1]) {left = mid;} else {right = mid - 1;}}return left;}
}

題目鏈接

2. 尋找峰值(162)

題目描述:
在這里插入圖片描述
在這里插入圖片描述

算法原理:
這一題和第二題是類似的,唯一的不同點在于這一題的峰值可能不為一并且-1下標以及nums.length下標都是假設為負無窮,所以我們的right以及left指針要分別從nums.length-1以及0開始。
這里具有的二段性和上題一致,當arr[mid]>arr[mid-1]時,mid到nums.length-1的區間必有峰,所以left要提到mid的位置,當arr[mid]<arr[mid-1]時,0到mid-1區間內必然有峰,所以right提到mid-1,畫圖還是比較好理解的。
因為mid必然是大于0的,所以不用去擔心越界問題,以及為了防止死循環要給mid計算加一。
代碼如下:

class Solution {public int peakIndexInMountainArray(int[] arr) {int left = 1, right = arr.length - 2;while (left < right) {int mid = left + (right - left + 1) / 2;if (arr[mid] >arr[mid - 1]) {left = mid;} else {right = mid - 1;}}return left;}
}

題目鏈接

3. 尋找旋轉排序數組中的最小值(153)

題目描述:
在這里插入圖片描述
在這里插入圖片描述

算法原理:
其實使用二分算法做這類題如果知道并且理解了上一篇博客中的模板的話,剩下來就是分析題目中的二段性,分析完之后直接套模板即可。那么這題的二段性一張圖足以描述,如下。
在這里插入圖片描述

這張圖是數組的一種抽象表示,此時y軸就是nums數組的值,x軸就是nums數組的下標,每個旋轉后的數組元素大小起伏都是這樣的,不難發現對于nums數組的最后一個元素,nums數組的前半部分是嚴格大于它的,但是nums數組的后半部分都是嚴格小于它的,由此我們就發現了nums數組的二段性,可以以nums數組的最后一個元素作為基準,具體邏輯如代碼所示。

代碼如下:

class Solution {public int findMin(int[] nums) {int n = nums.length - 1;int left = 0, right = n;while (right > left) {int mid = left + (right - left) / 2;if (nums[mid] > nums[n]) {left = mid + 1;} else {right = mid;}}return nums[right];}
}

題目鏈接

4. 點名(LCR 173)

題目描述:
在這里插入圖片描述
在這里插入圖片描述

算法原理:
使用二分查找的方法來解決,主要就是要去找到數組中的二段性。根據題目不難發現其中的records數組在沒有同學缺席之前,records[i]都是等于i的,在有同學缺席之后records[i]就等于i+1了,這就是數組二段性的體現。還要注意一個細節就是如果數組中缺失的是最后一個數時需要返回數組長度加一。
代碼如下:

class Solution {public int takeAttendance(int[] records) {int left = 0, right = records.length - 1;while (left < right) {int mid = left + (right - left) / 2;if (records[mid] - mid == 0) {left = mid + 1;} else {right = mid;}}return records[right] == right ? records.length : right;}
}

題目鏈接

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

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

相關文章

Flink,spark對比

三&#xff1a;az 如何調度Spark、Flink&#xff0c;MR 任務 首先&#xff0c;使用java編寫一個spark任務&#xff0c;定義一個類&#xff0c;它有main方法&#xff0c;里面寫好邏輯&#xff0c;sparkConf 和JavaSparkContext 獲取上下文&#xff0c;然后打成一個jar包&#xf…

數據結構——二叉樹相關題目

1.尋找二叉樹中數值為x的節點 //尋找二叉樹中數值為x的節點 BTNode* TreeFind(BTNode* root, BTDataType x)//傳過來二叉樹的地址和根的地址&#xff0c;以及需要查找的數據 {if (root Null){return Null;}//首先需要先判斷這個樹是否為空&#xff0c;如果為空直接返回空if (…

【JavaWeb程序設計】JSP實現購物車功能

目錄 一、結合之前所學的相關技術&#xff0c;編寫代碼實現以下購物車功能 1. 我實現的功能運行截圖如下 &#xff08;1&#xff09;商品列表頁面home.jsp &#xff08;2&#xff09;登錄賬號頁面/未登錄點擊結賬頁面 &#xff08;3&#xff09;重新登錄頁面&#xff08;記…

昇思25天學習打卡營第18天|ShuffleNet圖像分類

一、簡介&#xff1a; ShuffleNetV1是曠視科技提出的一種計算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一樣主要應用在移動端&#xff0c;所以模型的設計目標就是利用有限的計算資源來達到最好的模型精度。ShuffleNetV1的設計核心是引入了兩種操作&#xff1a;Poin…

如何在centos7安裝Docker

在centOS7中我們可以使用火山引擎鏡像源鏡像安裝Docker,以下是具體的安裝步驟。 step 1: 安裝必要的一些系統工具 sudo yum install -y yum-utils Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo https://mirrors.ivolces.com/docker/linux/centos/docker-ce.r…

力扣雙指針算法題目:二叉樹的層序遍歷(BFS)

目錄 1.題目 2.思路解析 3.代碼 1.題目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 對二叉樹進行層序遍歷&#xff0c;顧名思義&#xff0c;就是按每一層的順序對二叉樹一層一層地進行遍歷 思路如下 從第一層開始&#xff0c;先將二叉樹地頭放入隊列q&#xff0…

獨孤思維:副業被罵煞筆,割韭菜

做副業不要被外界干擾&#xff0c;不要被情緒牽絆。 不要因為別人的無心謾罵&#xff0c;隨口一評&#xff0c;就偃旗息鼓。 不要因為自己的情緒需要&#xff0c;找存在感&#xff0c;尋求人安慰。 他強任他強&#xff0c;清風拂山崗。 他橫由他橫&#xff0c;明月照大江。…

2007-2022年中國各企業數字化轉型與供應鏈效率

企業數字化轉型與供應鏈效率是現代企業管理和發展的兩個關鍵方面。以下是對中國各企業數字化轉型與供應鏈效率數據的介紹&#xff1a; 數據簡介 企業數字化轉型&#xff1a;指企業通過采用數字技術與創新方法&#xff0c;改造業務流程、組織結構和產品服務&#xff0c;以提升…

UCOS-III 系統移植

1. 移植前準備 1.1 源碼下載 UCOS-III Kernel Source&#xff1a; https://github.com/weston-embedded/uC-OS3.git Micriμm CPU Source &#xff1a; https://github.com/weston-embedded/uC-CPU.git Micriμm Lib Source&#xff1a; https://github.com/weston-embedded…

Nginx配置文件全解:從入門到設計

Nginx配置文件全解&#xff1a;從入門到架構設計 1. Nginx配置文件基礎 Nginx的主配置文件通常位于/etc/nginx/nginx.conf?。配置文件使用簡單的文本格式&#xff0c;由指令和指令塊組成。 1.1 基本語法規則 每個指令以分號(;)結束指令塊用大括號({})包圍配置文件支持使用…

多方SQL計算場景下,如何達成雙方共識,確認多方計算作業的安全性

安全多方計算在SQL場景下的限制 隨著MPC、隱私計算等概念的流行&#xff0c; 諸多政府機構、金融企業開始考慮參與到多方計算的場景中&#xff0c; 擴展數據的應用價值。 以下面這個場景為例&#xff0c; 銀行可能希望獲取水電局和稅務局的數據&#xff0c;來綜合計算得到各…

DolphinScheduler-3.1.9 資源中心實踐

前言 目前DolphinScheduler最新的穩定版本是 3.1.9 &#xff0c;基于此做些探索&#xff0c;逐漸深化學習路徑&#xff0c;以便于加深理解。 3.2.1 是最新的版本。目前的穩定版本是 3.1.9 基礎環境&#xff1a;Hadoop3.3, Java 8, Python3, MacOS14.2.1 一、本地偽分布式安裝…

學習筆記——動態路由——IS-IS中間系統到中間系統(開銷)

四、IS-IS開銷 1、IS-IS 開銷簡介 在IS-IS協議剛面世時&#xff0c;互聯網網絡結構還非常簡單&#xff0c;因此IS-IS早期的版本中只使用了6bit來描述鏈路開銷&#xff0c;鏈路開銷的取值范圍是1-63。一條路由的開銷范圍只有10bit&#xff0c;取值范圍是0-1023。 隨著計…

前端實現無縫自動滾動動畫

1. 前言: 前端使用HTMLCSS實現一個無縫滾動的列表效果 示例圖: 2. 源碼 html部分源碼: <!--* Author: wangZhiyu <w3209605851163.com>* Date: 2024-07-05 23:33:20* LastEditTime: 2024-07-05 23:49:09* LastEditors: wangZhiyu <w3209605851163.com>* File…

【ubuntu】安裝(升級)顯卡驅動,黑屏|雙屏無法使用問題解決方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 ubuntu 安裝(升級)顯卡驅動&#xff0c;黑屏|雙屏無法使用問題解決方法 由于項目需要&#xff0c;對顯卡驅動進行升級。升級完就黑屏。。。。&#xff0…

Fast R-CNN(論文閱讀)

論文名&#xff1a;Fast R-CNN 論文作者&#xff1a;Ross Girshick 期刊/會議名&#xff1a;ICCV 2015 發表時間&#xff1a;2015-9 ?論文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源碼&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 這篇論文提出了一…

WordPress禁止用戶注冊某些用戶名

不管在任何網站&#xff0c;用戶注冊時都有一個屏蔽非法關鍵詞&#xff0c;就是禁止注冊某些用戶名&#xff0c;原因是因為防止用戶使用一些特定的用戶名&#xff0c;例如管理員、官方等用戶名&#xff0c;還有就是那些攻擊性的詞語了。 加網站添加了屏蔽非法關鍵詞&#xff0…

BAT-致敬精簡

什么是bat bat是windows的批處理程序&#xff0c;可以批量完成一些操作&#xff0c;方便快速。 往往我們可以出通過 winR鍵來打開指令窗口&#xff0c;這里輸入的就是bat指令 這里就是bat界面 節約時間就是珍愛生命--你能想象以下2分鐘的操作&#xff0c;bat只需要1秒鐘 我…

考慮數據庫粒度的設計-提升效率

目錄 概要 場景 設計思路 小結 概要 公開的資料顯示&#xff0c;數據庫粒度是&#xff1a;“在數據庫領域&#xff0c;特別是數據倉庫的設計中&#xff0c;粒度是一個核心概念&#xff0c;它直接影響到數據分析的準確性和存儲效率。粒度的設定涉及到數據的詳細程度和精度&…

【JVM基礎篇】Java的四種垃圾回收算法介紹

文章目錄 垃圾回收算法垃圾回收算法的歷史和分類垃圾回收算法的評價標準標記清除算法優缺點 復制算法優缺點 標記整理算法&#xff08;標記壓縮算法&#xff09;優缺點 分代垃圾回收算法&#xff08;常用&#xff09;JVM參數設置使用Arthas查看內存分區垃圾回收執行流程分代GC算…