LeetCode:704_二分查詢(Binary Search)
阿新 • • 發佈:2021-07-11
給定一個n個元素有序的(升序)整型陣列nums 和一個目標值target ,寫一個函式搜尋nums中的 target,如果目標值存在返回下標,否則返回 -1。
示例 1:
輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中並且下標為 4
方法:二分查詢
二分查詢是一種基於比較目標值和陣列中間元素的教科書式演算法。
如果目標值等於中間元素,則找到目標值。
如果目標值較小,繼續在左側搜尋。
如果目標值較大,則繼續在右側搜尋。
演算法:
初始化指標 left = 0, right = n - 1。
當 left <= right:
比較中間元素 nums[pivot] 和目標值 target 。
如果 target = nums[pivot],返回 pivot。
如果 target < nums[pivot],則在左側繼續搜尋 right = pivot - 1。
如果 target > nums[pivot],則在右側繼續搜尋 left = pivot + 1。
class Solution: def search(self, nums: List[int], target: int) -> int:
#函式標註通常用於 型別提示:例如以下函式預期接受兩個 int 引數並預期返回一個 int 值: left, right = 0, len(nums) - 1 #初始化左右指標 while left <= right: #指標的判斷準則 pivot = left + (right - left) // 2 #選擇陣列中間中間元素,取整 ifnums[pivot] == target: #如果剛好符合條件,結束 return pivot if target < nums[pivot]: #如果目標小於中間元素,右邊的指標取中間左側 right = pivot - 1 else: left = pivot + 1 #如果目標大於中間元素,左邊的指標取中間右側
return -1
複雜度分析
時間複雜度:O(logN)。
空間複雜度:O(1)。
作者:LeetCode
連結:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-by-leetcode/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。