国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)

這篇具有很好參考價(jià)值的文章主要介紹了二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

博客昵稱:吳NDIR
個(gè)人座右銘:得之淡然,失之坦然
作者簡介:喜歡輕音樂、象棋,愛好算法、刷題
其他推薦內(nèi)容:計(jì)算機(jī)導(dǎo)論速記思維導(dǎo)圖
其他內(nèi)容推薦:五種排序算法


在這個(gè)愉快的周末讓我們聊一下二分查找吧!二分查找是一種很常用的算法,可幫助我們在有序數(shù)組中快速查找元素。

概念

  1. 問題:想象一下,你有一堆按升序排列的數(shù)字,并且你需要在其中查找一個(gè)對應(yīng)的數(shù)字。
  • 如果你采用線性查找方式,即從數(shù)組的首個(gè)元素開始遍歷,一直到找到對應(yīng)數(shù)字為止。

二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)

  • 顯然,采用這種方法你可能需要遍歷整個(gè)數(shù)組。如果數(shù)組很大,則這種線性查找方式會變得很慢。讓我們看看二分查找吧!
  • 當(dāng)我們需要在一個(gè)有序數(shù)組中查找某個(gè)值的位置時(shí),二分查找是一個(gè)高效的算法。這個(gè)算法的核心思想是將數(shù)組一分為二,然后判斷目標(biāo)值可能存在于數(shù)組的哪一個(gè)半邊,不斷縮小范圍,最終找到目標(biāo)位置或者確定目標(biāo)值不存在于數(shù)組中。

二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)下面是二分查找的一般步驟:

  1. 首先確定目標(biāo)值在數(shù)組的哪個(gè)區(qū)間內(nèi)。將目標(biāo)值和數(shù)組的中間值進(jìn)行比較,如果目標(biāo)值等于中間值,那么我們已經(jīng)找到了目標(biāo),在中間值的位置返回。如果目標(biāo)值小于中間值,那么我們將在左半邊查找目標(biāo),否則我們將在右半邊查找目標(biāo)。

  2. 分別使用上一步中的方式在左半邊或右半邊遞歸查找,直到找到目標(biāo)或者確定目標(biāo)不存在于數(shù)組中。

  3. 如果我們發(fā)現(xiàn)要查找的目標(biāo)值不在數(shù)組中,那么我們可以返回 -1 表示未找到目標(biāo)。

二分查找的時(shí)間復(fù)雜度為 O(log n),其中 n 表示數(shù)組長度。這是因?yàn)槊看伪容^可以將查找范圍減半,而在最壞情況下需要進(jìn)行的比較次數(shù)是 log n。在使用二分查找時(shí),需要注意一些細(xì)節(jié),首先數(shù)組必須是已經(jīng)排序好的,查找范圍的左右邊界需要正確設(shè)置,一些邊界條件需要特殊處理等。同時(shí),二分查找并不適用于所有場景,例如數(shù)據(jù)量很小時(shí)使用暴力搜索會更加有效。

引例

現(xiàn)在讓我們看看一道有關(guān)二分查找的題目吧!

題目描述:

  • 給定一個(gè) n 個(gè)元素有序的(升序)整型數(shù)組 nums 和一個(gè)目標(biāo)值 target ,寫一個(gè)函數(shù)搜索 nums 中的 target,如果目標(biāo)值存在返回下標(biāo),否則返回 -1。

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現(xiàn)在 nums 中并且下標(biāo)為 4

示例 2:

輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1

  • 思路步驟
    二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)

1.首先將數(shù)組分為左右兩個(gè)區(qū)間
2.將中間數(shù)與待查找目標(biāo)比較

  • 在查找范圍區(qū)間[left, right]中取中點(diǎn) mid,比較 nums[mid] 和 target 的大小。
    如果 nums[mid] = target,則mid即為要尋找的下標(biāo),返回 mid。
    如果 nums[mid] < target,則target只可能在mid的右側(cè),更新區(qū)間[mid+1,right]。
    如果 nums[mid] > target,則target只可能在mid的左側(cè),更新區(qū)間[left,mid-1]。

3.重復(fù)步驟1和2,直到找到目標(biāo)target或者未找到目標(biāo)但left=right
4.最終返回下標(biāo),或返回-1表示 target 不存在于 nums 數(shù)組中。
二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)

  • 示例代碼
int search(int nums[], int numsSize, int target){
    int left=0,right=numsSize-1,mid;
    while(left<=right){
   		mid=left+(right-left)/2;//根據(jù)新區(qū)間定義中間數(shù)下標(biāo)
   		//比較判斷
        if(nums[mid]<target){
            left=mid+1;//定義區(qū)間[mid+1,right]
        }
        else if(nums[mid]>target){
            right=mid-1;//定義區(qū)間[left,mid-1]
        }
        else{
            return mid;//找到target并返回下標(biāo)
        }
    }
    return -1;//未找到返回-1
}

講解

  • 在上述代碼中,我們首先初始化左右兩個(gè)指針。**left 和 right 分別指向數(shù)組的第一位和最后一位。**然后,我們在循環(huán)中計(jì)算中間指針 mid 的位置,再將中間指針的值與要查找的值進(jìn)行比較,以確定在哪一側(cè)繼續(xù)搜索。如果找到匹配值,則返回其下標(biāo);否則,如果整個(gè)數(shù)組都已搜索完畢,則返回 -1。
  • 那么,我們要如何保證它的正確性和性能呢?
  1. 首先,我們需要確保我們的算法是正確的。在二分查找中,正確性在于確定中間元素是否是我們正在尋找的值,而不是中間位置是否已經(jīng)被檢查過。因此,我們可以通過在每個(gè)循環(huán)中將查找范圍的一半排除來保證其正確性。
  • 其次,我們需要考慮性能問題。在最壞情況下,遍歷整個(gè)數(shù)組的時(shí)間復(fù)雜度為 O ( l o g n ) O(log n) O(logn)。但是,由于此算法可以輕松地丟棄一半的數(shù)據(jù),因此在一些特殊情況下,我們可以獲得更快的執(zhí)行速度。

總而言之,二分查找是一種非常有效的算法,特別是在大型數(shù)據(jù)集上查找單個(gè)值時(shí)。通過理解二分查找算法的工作原理,我們可以更好地掌握它并將其用于實(shí)際開發(fā)中。文章來源地址http://www.zghlxwxcb.cn/news/detail-417345.html

到了這里,關(guān)于二分查找入門教學(xué)(動(dòng)態(tài)講解圖、模擬示例、二分查找代碼講解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【動(dòng)態(tài)規(guī)劃】【二分查找】【C++算法】730. 統(tǒng)計(jì)不同回文子序列

    【動(dòng)態(tài)規(guī)劃】【二分查找】【C++算法】730. 統(tǒng)計(jì)不同回文子序列

    視頻算法專題 動(dòng)態(tài)規(guī)劃匯總 二分查找算法合集 給你一個(gè)字符串 s ,返回 s 中不同的非空回文子序列個(gè)數(shù) 。由于答案可能很大,請返回對 109 + 7 取余 的結(jié)果。 字符串的子序列可以經(jīng)由字符串刪除 0 個(gè)或多個(gè)字符獲得。 如果一個(gè)序列與它反轉(zhuǎn)后的序列一致,那么它是回文序列

    2024年01月19日
    瀏覽(21)
  • 代碼隨想錄 LeetCode數(shù)組篇 二分查找

    代碼隨想錄 LeetCode數(shù)組篇 二分查找

    # (簡單)704. 二分查找 題目鏈接 代碼隨想錄 - 二分查找思路 二分查找,思路很簡單,但是在while循環(huán)left和right的比較是寫=還是,還有right=mid還是right=mid-1容易混淆 需要想清楚對區(qū)間的定義,是[left,right],還是[left,right) (版本一,左閉右閉版本) (版本二,左閉右開) 題目

    2024年02月02日
    瀏覽(93)
  • 【算法】【Python3、動(dòng)態(tài)規(guī)劃、貪心、二分查找】力扣1671. 得到山形數(shù)組的最少刪除次數(shù)

    1671. 得到山形數(shù)組的最少刪除次數(shù) 給定一個(gè)整數(shù)數(shù)組 nums ,我們定義該數(shù)組為山形數(shù)組當(dāng)且僅當(dāng): nums 的長度至少為 3。 存在一個(gè)下標(biāo) i 滿足 0 i len(nums) - 1 且: nums[0] nums[1] ... nums[i - 1] nums[i] nums[i] nums[i + 1] ... nums[len(nums) - 1] 現(xiàn)在,給定整數(shù)數(shù)組 nums ,我們的目標(biāo)是將其變?yōu)?/p>

    2024年01月18日
    瀏覽(23)
  • 代碼隨想錄算法練習(xí)Day1:二分查找

    代碼隨想錄算法練習(xí)Day1:二分查找

    題目鏈接:704. 二分查找 卡哥視頻講解:手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找 二分法概述: 二分法(Binary Search)是一種在有序數(shù)組或列表中查找目標(biāo)元素的算法。 二分法使用前提 : 有序數(shù)組或列表 :二分法要求在查找的數(shù)據(jù)結(jié)

    2024年04月23日
    瀏覽(95)
  • 看完這篇文章你就徹底懂啦{保姆級講解}-----(LeetCode刷題704、35、34數(shù)組二分查找) 2023.4.17

    看完這篇文章你就徹底懂啦{保姆級講解}-----(LeetCode刷題704、35、34數(shù)組二分查找) 2023.4.17

    本文章一部分內(nèi)容參考于《代碼隨想錄》----如有侵權(quán)請聯(lián)系作者刪除即可,撰寫本文章主要目的在于記錄自己學(xué)習(xí)體會并分享給大家,全篇并不僅僅是復(fù)制粘貼,更多的是加入了自己的思考,希望讀完此篇文章能真正幫助到您?。。?數(shù)組是由n(n=1)個(gè) 相同類型 的數(shù)據(jù)元素

    2024年02月05日
    瀏覽(28)
  • 代碼隨想錄Python:704. 二分查找,27. 移除元素

    數(shù)組是非?;A(chǔ)的數(shù)據(jù)結(jié)構(gòu)。 數(shù)組是存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合。 題目: 給定一個(gè)? n ?個(gè)元素有序的(升序)整型數(shù)組? nums ?和一個(gè)目標(biāo)值? target ??,寫一個(gè)函數(shù)搜索? nums ?中的? target ,如果目標(biāo)值存在返回下標(biāo),否則返回? -1 。 題目鏈接:. - 力扣

    2024年02月13日
    瀏覽(20)
  • LeetCode-1483. 樹節(jié)點(diǎn)的第 K 個(gè)祖先【樹 深度優(yōu)先搜索 廣度優(yōu)先搜索 設(shè)計(jì) 二分查找 動(dòng)態(tài)規(guī)劃】

    LeetCode-1483. 樹節(jié)點(diǎn)的第 K 個(gè)祖先【樹 深度優(yōu)先搜索 廣度優(yōu)先搜索 設(shè)計(jì) 二分查找 動(dòng)態(tài)規(guī)劃】

    給你一棵樹,樹上有 n 個(gè)節(jié)點(diǎn),按從 0 到 n-1 編號。樹以父節(jié)點(diǎn)數(shù)組的形式給出,其中 parent[i] 是節(jié)點(diǎn) i 的父節(jié)點(diǎn)。樹的根節(jié)點(diǎn)是編號為 0 的節(jié)點(diǎn)。 樹節(jié)點(diǎn)的第 k 個(gè)祖先節(jié)點(diǎn)是從該節(jié)點(diǎn)到根節(jié)點(diǎn)路徑上的第 k 個(gè)節(jié)點(diǎn)。 實(shí)現(xiàn) TreeAncestor 類: TreeAncestor(int n, int[] parent) 對樹和父

    2024年04月16日
    瀏覽(25)
  • 代碼隨想錄day1 | 704.二分查找 27.移除元素

    代碼隨想錄day1 | 704.二分查找 27.移除元素

    1、循環(huán)變量 2、判斷條件 當(dāng)時(shí)左閉右閉時(shí),while循環(huán)里面的條件,我們可以先假設(shè),有等號即有l(wèi)eft=right的情況,例如[1,1]這個(gè)區(qū)間,那么循環(huán)是要進(jìn)入里面的,所以要取得等號。 判斷的時(shí)候,nums[mid]tar,那么必然tar不在右半?yún)^(qū)間,所以right=mid-1 nums[mid]tar,那么必然tar不在左半

    2024年02月15日
    瀏覽(25)
  • 【代碼隨想錄算法第一天| 704.二分查找 27.移除元素】

    題目鏈接:二分查找 文章講解:代碼隨想錄.二分查找 視頻講解:手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_嗶哩嗶哩_bilibili 二分前提:有序數(shù)組,數(shù)組中無重復(fù)元素 方法:結(jié)合數(shù)組的特征,可以為左閉右閉區(qū)間[0, 數(shù)組長度-1],或者左

    2024年02月16日
    瀏覽(21)
  • 【Python從入門到人工智能】詳解 PyTorch數(shù)據(jù)讀取機(jī)制 DataLoader & Dataset(以人民幣-RMB二分類實(shí)戰(zhàn) 為例講解,含完整源代碼+問題解決)| 附:文心一言測試

    ? 我想此后只要能以工作賺得生活費(fèi),不受意外的氣,又有一點(diǎn)自己玩玩的余暇,就可以算是萬分幸福了。 ???????????????????????????????????????????????????????????? ———《兩地書》 ? ??作者主頁: 追光者♂?? ???????? ??個(gè)人簡介:

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包