給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
示例 1:
輸入: nums = [-1,0,3,5,9,12], target = 9示例 2:輸出: 4
解釋: 9 出現在 nums 中並且下標為 4
輸入: nums = [-1,0,3,5,9,12], target = 2你可以假設 nums 中的所有元素是不重複的。輸出: -1
解釋: 2 不存在 nums 中因此返回 -1
n 將在 [1, 10000]之間。
nums 的每個元素都將在 [-9999, 9999]之間。
二分查詢的前提是陣列或列表有序,下面以公升序列表為例,key為要查詢的關鍵字,left 和 right 相當於左右指標,在陣列或列表中就是左右下標,表示在陣列或列表的 [left, right] 範圍內查詢,查詢過程中不斷縮小 [left, right] 覆蓋的範圍,直到查詢成功返回下標,不成功返回none,給出迴圈和遞迴實現。
在迴圈實現中,是可以不需要 left 和 right 引數的,但在遞迴中一定需要。
class
solution
(object):
defsearch
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: int
"""start, end =0,
len(nums)-1
while start <= end:
mid =
(start+end)//2
if nums[mid]
== target:
return mid
elif target > nums[mid]
: start = mid+
1else
: end = mid-
1return-1
nums =[-
1,0,
3,5,
9,12]
target =
9s = solution(
)rs = s.search(nums, target)
print
(rs)
def
halfsearch
(orderedlist, key, left , right)
:if left > right:
return
none
mid =
(left + right)//2
if key == orderedlist[mid]
:return mid
elif key > orderedlist[mid]
:return halfsearch(orderedlist, key, mid +
1, right)
else
:return halfsearch(orderedlist, key, left, mid -
1)
注:
如果引數裡沒有left,right,則只能通過二分查詢判斷當前元素在沒在序列裡,而不能找到對應的索引。
def
binary_chop
(alist, data)
:"""
遞迴解決二分查詢
:param alist:
:return:
"""n =
len(alist)
if n <1:
return
false
mid = n //
2if alist[mid]
> data:
return binary_chop(alist[
0:mid]
, data)
elif alist[mid]
< data:
return binary_chop(alist[mid+1:
], data)
else
:return
true
/**
* @param nums
* @param target
* @return
*/var
search
=function
(nums, target)
else
else}}
return-1
};
LeetCode704 二分查詢
題目描述 給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例1 輸入 nums 1,0,3,5,9,12 target 9 輸出 4 解釋 9 出現在 nums 中並且下標為 4...
leetcode 704 二分查詢
給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。這道題,並不難,但是邊界條件上容易犯錯。public intsolution int nums,int target int len...
leetcode704 二分查詢
給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例 1 輸入 nums 1,0,3,5,9,12 target 9輸出 4解釋 9 出現在 nums 中並且下標為 4示例 2 輸...