題目鏈接:704. 二分查找
卡哥視頻講解:手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找
二分法概述:
二分法(Binary Search)是一種在有序數(shù)組或列表中查找目標(biāo)元素的算法。
二分法使用前提:
-
有序數(shù)組或列表:二分法要求在查找的數(shù)據(jù)結(jié)構(gòu)中元素按照某種順序有序排列,通常是升序排列。如果數(shù)組或列表沒有排序,需要先對其進(jìn)行排序,否則無法使用二分法進(jìn)行查找。
-
目標(biāo)元素存在:二分法適用于在有序數(shù)組或列表中查找目標(biāo)元素是否存在,或者查找目標(biāo)元素的位置。如果目標(biāo)元素不在數(shù)組或列表中,二分法無法成功找到目標(biāo)元素。
-
隨機(jī)訪問:二分法要求能夠通過索引或指針以O(shè)(1)的時(shí)間復(fù)雜度訪問數(shù)組或列表的任意位置。這通常意味著數(shù)據(jù)結(jié)構(gòu)需要支持隨機(jī)訪問,比如數(shù)組。
代碼示例:
示例1(左閉右閉寫法):???????
示例2(左閉右開寫法):
總結(jié):
1.>>
是右移位操作符,它將左操作數(shù)向右移動指定的位數(shù)。在這里,right - left
表示當(dāng)前搜索范圍的長度,right - left >> 1
將長度右移一位,相當(dāng)于將長度除以2,得到搜索范圍的一半。然后再加上 left
,得到中間位置 mid
。
這種寫法與普通的 (left + right) / 2
求中間位置的寫法相比,可以避免在大數(shù)相加時(shí)可能導(dǎo)致的溢出問題,同時(shí)也更為高效。因?yàn)橛乙莆徊僮鞣男阅鼙瘸ㄟ\(yùn)算更高,尤其在一些硬件上會被優(yōu)化為位運(yùn)算。文章來源:http://www.zghlxwxcb.cn/news/detail-855922.html
2.在寫范圍的時(shí)候,是根據(jù)是否包含數(shù)組的邊界元素來確定的。文章來源地址http://www.zghlxwxcb.cn/news/detail-855922.html
到了這里,關(guān)于代碼隨想錄算法練習(xí)Day1:二分查找的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!