二分搜尋小結-x的平方根
二分查詢法作為一種常見的查詢方法,將原本是線性時間提升到了對數時間範圍,大大縮短了搜尋時間,具有很大的應用場景,而在LeetCode中,要運用二分搜尋法來解的題目也有很多,但是實際上二分查詢法的查詢目標有很多種,而且在細節寫法也有一些變化。
第一類: 需查詢和目標值完全相等的數
這是最簡單的一類,也是我們最開始學二分查詢法需要解決的問題,比如我們有陣列[2, 4, 5, 6, 9],target = 6,那麼我們可以寫出二分查詢法的程式碼如下:
def find(nums,target):
l, r = 0, len(nums)-1
while l < r:
mid = l + (r-l)//2
if nums[mid] == target:
return mid
elif nums[mid] < target:
l = mid + 1
else:
r = mid - 1
return r
def main():
nums = [1,2,4,6,8]
target=8
print(find(nums,target))
main()
第二類: 查詢第一個不小於目標值的數,可變形為查詢最後一個小於目標值的數
這是比較常見的一類,因為我們要查詢的目標值不一定會在陣列中出現,也有可能是跟目標值相等的數在陣列中並不唯一,而是有多個,那麼這種情況下nums[mid] == target這條判斷語句就沒有必要存在。比如在陣列[2, 4, 5, 6, 9]中查詢數字3,就會返回數字4的位置;在陣列[0, 1, 1, 1, 1]中查詢數字1,就會返回第一個數字1的位置。我們可以使用如下程式碼:
def find(nums,target):
l, r = 0, len(nums)-1
while l < r:
mid = l + (r-l)//2
if nums[mid] == target:
return mid
elif nums[mid] < target:
l = mid + 1
else:
r = mid
def main():
nums = [0,1,1,1,1]
target=1
print(find(nums,target))
main()
69.實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回型別是整數,小數部分將被捨去。
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0:
return 0
if x == 1:
return 1
l, r = 0, x - 1
while l <= r:
mid = l + (r-l)//2
if mid * mid <= x and (mid+1)*(mid+1) > x:
return mid
elif mid*mid > x:
r = mid-1
else:
l = mid+1
相關文章
- 資料結構-二分搜尋樹資料結構
- 資料結構之PHP二分搜尋樹資料結構PHP
- 06 二分搜尋--ing
- 從二分搜尋到二叉搜尋樹
- 二分搜尋樹元素的插入
- 二分搜尋(折半查詢)
- Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋Python演算法
- 二分搜尋之搜尋陣列中目標元素的首尾下標陣列
- 二分搜尋演算法的實現演算法
- 二分搜尋樹(Binary Search Tree)
- LeetCode 69[x的平方根]LeetCode
- 69.x的平方根
- 看得見的資料結構Android版之二分搜尋樹篇資料結構Android
- 演算法與資料結構之二分搜尋樹演算法資料結構
- LeetCode入門指南 之 二分搜尋LeetCode
- github搜尋小技巧Github
- 20240713總結(搜尋專題,但是不想搜尋)
- 二分搜尋樹系列之[ 插入操作 (insert) ]
- 二分搜尋樹系列之「 插入操作 (insert) 」
- LeetCode LCR072[x的平方根]LeetCode
- 谷歌搜尋用上BERT,10%搜尋結果將改善谷歌
- 關於樹的資料結構(二分搜尋樹,堆和優先佇列)資料結構佇列
- 二分搜尋演算法-吃香蕉問題演算法
- 用PHP來實現二分搜尋樹(BST)PHP
- GitHub 搜尋專案小技巧Github
- win10搜尋框太長如何縮小_win10縮小搜尋框的步驟Win10
- LeetCode 之 JavaScript 解答第69題 —— X 的平方根(Squrt(x))LeetCodeJavaScript
- 二分搜尋樹系列之[ 節點刪除 (remove) ]REM
- 二分搜尋樹系列之「 節點刪除 (remove) 」REM
- 二分搜尋樹系列之[查詢(Search)-包含(Contain)]AI
- 二分搜尋樹系列之「查詢(Search)-包含(Contain)」AI
- 【譯】Swift演算法俱樂部-二分搜尋Swift演算法
- vue2實現搜尋結果中的搜尋關鍵字高亮Vue
- 二叉搜尋樹的結構
- 利用搜尋結果頁SEO的方法
- 演算法總結--搜尋演算法
- 搜尋演算法總結演算法
- 【資料結構】搜尋樹資料結構