LeetCode 704 二分查詢

2021-09-26 06:14:29 字數 2504 閱讀 5895

給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9

輸出: 4

解釋: 9 出現在 nums 中並且下標為 4

示例 2:

輸入: nums = [-1,0,3,5,9,12], target = 2

輸出: -1

解釋: 2 不存在 nums 中因此返回 -1

你可以假設 nums 中的所有元素是不重複的。

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 輸...