数据结构与算法———力扣704——二分查找——python

在这里插入图片描述
整体思路如下:
理解题意:整个数组是 从小到大,从左往右,这就是升序。

二分法思路:
例子:在100以内的整数随机挑一个数出来,对方让你猜是多少,最快最稳妥的方式就是二分法。
直接猜 这个数是不是50,如果不是,那大于50还是小于50,对方会告诉你大于或者小于,这样一定会又快又稳。

程序思路:
设定一个范围,大值与小值(相当于上个例子里的0~100),进行二分,得到当前值(就相当与上面例子里的50),先看是否等于目标值,再看是大于还是小于目标值。如果当前值大于目标值,说明范围大了,以当前大值为边界,继续二分,因为当前值已经大于目标值,那就可以将范围再缩减1格,聊胜于无。小于的话就相反喽。

class Solution:
    def search(self, nums: List[int], target: int) -> int:
    	# 设定一个区间范围 大值与小值 注意最大值使用len()需要-1 否则就会数组越界
        min1, max1 = 0, len(nums) - 1
        # 设定一个循环条件
        while min1 <= max1:
        	# 进行二分  范围的一半  注意:因为小值也会移动的 所以要加上它
            mid = (max1 - min1) // 2 + min1
            # 如果找到了,就返回 数组的索引
            if nums[mid] == target:
                return mid
            # 如果 当前值 大于 目标值
            elif nums[mid] > target:
            	# 改范围:将大值 定为 当前值 - 1  
                max1 = mid - 1
            else:
            	# 改范围:将小值 定为 当前值 + 1
                min1 = mid + 1
        # 如果循环结束也没找到,那就没有了
        return -1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默执_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值