二分法:
使用二分法的前提:
1.数组为有序数组;
2.数组中无重复元素.有重复元素也行,不过结果则不唯一
两种写法:左闭右闭, 左闭右开
特别注意边界位置,取等号还是不取等号
704. 二分查找python
leetcode链接
给定一个 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
解析
使用二分法
法一:左闭右闭区间
class Solution:
def search(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
middle = (left + right) // 2
if nums[middle] < target:
left = middle + 1
elif nums[middle] > target:
right = middle - 1
else:
return middle
return -1
法二:左闭右开区间
class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right=0,len(nums)
while left<right:
middle =(left+right)//2
if nums[middle]<target:
left=middle+1
elif nums[middle]>target:
right=middle
else:
return middle
return -1
参考:跟着大佬去学习编码,讲解的很细致.推荐代码随想录:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF