二分法解读:704. 二分查找python

二分法:

使用二分法的前提:
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

你可能感兴趣的:(leetcode刷题,python,二分法,leetcode)