leetcode_704_二分查找

1 题目

地址:https://leetcode-cn.com/problems/binary-search/
在这里插入图片描述

2 我的提交

时间复杂度的log(n),空间为O(1)
直接二分查找,毕竟题目都说了,嘿嘿,这里需要注意的有两点
1 mid的取值,要注意每一次和target对比之后,都需要让low = mid +1 或者high = mid -1,不能直接让high或者mid等于mid
2 出口应该是low > high,因为low和high是可以相等的

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        low = 0
        high = len(nums) - 1
        mid = (low + high)//2 # 转换成整数,这里 // 相当于向下取整
        while low <= high: # 出口
            if nums[mid] == target:
                return mid
            if nums[mid] < target:
                low = mid + 1 # 这里要注意是+1
                mid = (low + high)//2
            else:
                high = mid - 1 # 这里是 -1 不是直接等于mid
                mid = (low + high)//2
        return -1

我上面的代码写法是在左闭右闭的基础上的,还有左闭右开的情况

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left,right  = 0, len(nums) # 这里要注意,右边变成了一个取不到的值
        while left < right:
            mid = (left + right) // 2
            if nums[mid] < target:
                left = mid+1
            elif nums[mid] > target:
                right = mid # 右边只是等于mid
            else:
                return mid
        return -1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值