二分法查找

二分法的邏輯非常簡單,但是往往會因?yàn)檫吔鐔栴}而出錯(cuò)。這里可以先參考代碼隨想錄感受一下,不同的二分邊界對于循環(huán)判斷的區(qū)別。

1、leetcode 35 搜索插入位置?力扣

1)問題描述

問題描述

2)分析錯(cuò)誤原因:

(1)沒有把情況考慮完整(尤其是特殊情況):當(dāng)numsSize == 1 時(shí)。

(2)代碼過于復(fù)雜,后面考慮到numsSize == 1的情形,但該部分程序獨(dú)立,沒有充分利用這部分信息服務(wù)后面計(jì)算機(jī)執(zhí)行過程。

3)改正

修繕后的代碼


2、leetcode 278 第一個(gè)錯(cuò)誤版本?力扣

1)問題描述

問題描述

2)錯(cuò)誤原因

(1)時(shí)間復(fù)雜度超出范圍;

(2)后來用二分法,但是對二分法不夠熟悉,不知道結(jié)束的結(jié)點(diǎn)。

3)改正

修繕后代碼



3、leetcode 34 在數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置?力扣

1)問題描述

問題描述

2)難點(diǎn)

二分查找的結(jié)果如何確保是第一個(gè)/ 最后一個(gè)target?

3)思路:

分兩部分(以下兩個(gè)二分查找都是以r = numsSize - 1,l = 0為初值):

? ? (i)二分查找找第一個(gè)target;

? ? 套用模板a:

模板a

理由:當(dāng)nums[mid] >= target 時(shí),通過賦值 r = mid,就可以確定左邊界。當(dāng)nums[mid] < target時(shí),則可以令l = mid + 1,從而實(shí)現(xiàn)找第一個(gè)target。若循環(huán)結(jié)束,最后nums[r] != target,則說明數(shù)組中不存在等于target的元素,直接返回結(jié)果。

(ii)二分查找找最后一個(gè)target;

模板b

當(dāng)nums[mid] > target時(shí),往左半?yún)^(qū)域賦找,r = mid - 1;當(dāng)nums[mid] <= target時(shí),往右半?yún)^(qū)域查找,l = mid,直到找到最后一個(gè)<=target的元素,返回其位置。

tips:

(1)為防止mid計(jì)算過程溢出,可以用表達(dá)式mid = l + (r - l)/2 + 1.

(2)為什么模版2中mid和模版1的mid不一樣?

節(jié)選力扣

4)代碼實(shí)現(xiàn)

代碼實(shí)現(xiàn)



4、leetcode 69 x的平方根?力扣

1)問題描述

問題描述

2)錯(cuò)誤原因分析

mid * mid溢出

另外,在撰寫代碼過程中,由于不熟練,知道求<= x情形,即套用模版b,但是在賦值的時(shí)候搞不清楚mid賦值給誰。理解好,<=x的意義是找“最后一個(gè)滿足<=x的元素“,故區(qū)間應(yīng)該是從左往右收縮,從而l = mid;

3)改正

改善的代碼



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 有序矩陣中第K小的元素 給定一個(gè) n x n 矩陣,其中每行和每列元素均按升序排序,找到矩陣中第k小的元素。請注意...
    我是小曼巴閱讀 1,822評論 0 1
  • Swift的二分法查找實(shí)踐 在這篇教程中我們會使用計(jì)算機(jī)科學(xué)里一個(gè)基礎(chǔ)的算法:二分法查找binary search...
    不是謝志偉閱讀 2,013評論 1 5
  • 一維數(shù)組 首先開始最基本的Binary Search, 數(shù)組是有序的,但是有重復(fù)數(shù)。例題: Search for ...
    dol_re_mi閱讀 2,496評論 0 2
  • 首頁目錄 點(diǎn)擊查看[http://www.itdecent.cn/p/c390b7d89e35] 第一題 難度:...
    Benzic閱讀 791評論 0 0
  • 文章內(nèi)代碼來自 http://www.cnblogs.com/wakerobin/archive/2009/10/...
    暮雨沉淪閱讀 707評論 0 1

友情鏈接更多精彩內(nèi)容