链接:https://leetcode-cn.com/problems/binary-search
给定一个 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
本题采用二分法,我们要明确搜索区间。
首先我们要找到该区间的中间值mid=(start+end)/2。然后将目标值target和中间值进行比较,由题可知该数组为有序(升序)整型数组。若nums[mid] ==target,说明目标值就是nums[mid],查找成功,并返回该位置;若nums[mid]>target,目标值在mid的左边;若nums[mid]<target,则目标值在mid的右边。
(1)start与end的初始值
(2) while里的判断语句是否有等号,本题采用左闭右开的区间定义,所以while括号内使用<=
(3) target与mid大小比较后,start与end的赋值
(4)二分法的前提条件:有序且无重复元素
#代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
start = 0
end = len(nums)-1
while (start <= end):
medium = int((start+end)/2)
if nums[medium] == target:
return medium
if nums[medium] > target:
end = medium-1
else:
start = medium+1
if (end <0 or nums[end]!=target):
return -1