题目链接:https://leetcode.cn/problems/binary-search/description/

思路:

二分查找:

前提条件:有序不重复元素数组

1.左闭右闭:

定义target在目标数组左闭右闭区间内,[left,right]

if(nums[middle]) > target ,中间元素在目标值的右边,则缩小右边界 right =middle - 1

中间元素在目标值的左边,则左边界 left = middle+1

例如在数组:1,2,3,4,7,9,10中查找元素2,如图所示:

class Solution(object):
    def search(self, nums, target):
       left,right = 0,len(nums)-1
  
       while(left<=right):
        middle = left + (right - left) // 2
        if(nums[middle] > target):
            right = middle - 1
        elif nums[middle] < target:
            left = middle + 1
        else:
            return middle
       return -1

2.左闭又开:

while(left < right ) ,left == right无意义

if(nums[middle] > target) ,right更新为middle ,因为nums[middle] 不等于 target

class Solution(object):
    def search(self, nums, target):
       left,right = 0,len(nums)
       
       while(left<right):
        middle = left + (right - left )//2
        if(nums[middle] > target):
            right = middle
        elif(nums[middle]<target):
            left = middle+1
        else:
            return middle

       return -1