【LeetCode刷题】704. 二分查找

1:题目描述(力扣

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2:解题思路

第一步:先判断目标值是否存在于数组中,不存在则直接返回-1

第二步:目标值存在于数组中,先初始化数组的左边界下标(left=0),和右边界下标(right=len(nums)-1),当left <= right,进入循环,寻找目标值

第三步:在第二步的基础上,获取数组中间元素下标,mid=(left+right)//2,判断中间元素(nums[mid])于目标值(target)的大小,当nums[mid]>target,因为数组是有序的,所以目标值在左边界值与中间元素之间,因此修改右边界下标:right=mid-1;当nums[mid]<target,目标值在中间元素与右边界值之间,因此修改左边界下标:left=mid+1;当muns[mid]=target,目标元素找到,返回下标mid

代码展示:

class Solution:
    def search(self, nums, target) -> int:
        left = 0      # 初始化左边界下标
        right = len(nums)-1          # 初始化右边界下标
        if target not in nums: return -1         # 判断元素是否在数组中
        while left <= right:         # 当left<=right时,进入循环
            mid = (right+left)//2     # 获取中间元素下标
            if nums[mid] < target:     # 中间元素小于目标值
                left = mid + 1         # 修改左边界下标
            elif nums[mid] > target:     # 中间元素大于目标值
                right = mid - 1         # 修改右边界下标
            else:                      # 中间元素等于目标值
                return mid             # 返回下标

参考视频:

手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值