项目场景:
(leetcode704)给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
例如:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9
算法:
初始化指针 left = 0, right = n - 1。
当 left <= right:
比较中间元素 nums[mid] 和目标值 target 。
如果 target = nums[mid],返回 mid。
如果 target < nums[mid],则在左侧继续搜索 right = mid - 1。
如果 target > nums[mid],则在右侧继续搜索 left = mid + 1。
二分查找:
@bbbbbaiyang
class Solution:
def search(self, nums, target):
if nums == None or len(nums) == 0:
return 0
left,right= 0,len(nums)-1
while (left <= right):
mid = left +(right - left)//2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
二分搜索经典写法 ,三点注意:
1. 循环退出条件,注意是 left <= right,⽽不是 left < right。
2. mid 的取值,mid := left+ (right-left) // 2
3. left 和 right 的更新。left = mid + 1,right = mid - 1。