唐伯虎怎么才能快速找到秋香-二分查找算法_唐伯虎点秋香怎么找到秋香的(5)

🍻算法讲解针对于想要丰富自己相关知识和语法的小伙伴们🍻
🍹可以选择性观看,小博主尽力做到每个知识点详细讲解和拓展🍹
🎄文章尽可能声形并茂,还要靠各位小伙伴们三连改善🎄
💌小博主在这里感谢各位大佬啦!!!💌


文章目录

在这里插入图片描述

🌟前言

作为一名合格的程序员,估计大家都听过二分查找这个算法,甚至也都了解它,那么二分查找算法你真的吃透了吗?今天我们就来讲解以下二分查找究竟是个什么东西?为什么他在项目中在学习中都如此的受欢迎!
在这里插入图片描述

🌟二分查找概念及简单例子

✨二分查找概念

其实官方的概念我这里就不谈了,就是切一半,然后看哪一块合适,在切一半,一直循环这个过程,直到找到我需要的那个解。
在这里插入图片描述

✨简单二分查找问题及求解

我们先来看一个简单的二分查找的例子:
给定一个排序的整数序列nums(升序且不重复)和一个要查找的目标整数target(target在序列中存在,查找目标整数在序列中的下标从0开始)。

示例: 【1,2,3,4,5】 target=3
输出:2
【1,2,3,4,5】 target=5
输出:4

我们首先来分析一下,因为一直要重复做一个工作所以我们想到了使用递归,那么终止条件是什么呢?很简单,那就是找到了呗!唐伯虎点秋香-找到了秋香不就完事了吗!

def search(nums,start,end,target):
    if target==nums[len(nums)-1]:
        return len(nums)-1#这里表示如果目标值等于最后一个数值,那么我们就返回最后这个值,为什么这么做?看下面
    mid=(start+end)//2#取整数
    if nums[mid]>target:
        return search(nums,start,mid,target)
    if nums[mid]<target:
        return search(nums,mid,end,target)
    if nums[mid]==target:
        return mid
def binary\_search(nums,target):
    return search(nums,0,len(nums)-1,target)
if __name__=="\_\_main\_\_":
    n=[1,2,3,4,5]
    target=5
    target_index=binary_search(n,target)
    print(target_index)

这里我们主要讲解一下关于第一步为什么要单独取最后一位呢?因为当我们一直迭代,迭代到剩下两个数值的时候,那么start=0,end=1,此时(start+end)//2是等于0的,所以我们这个时候的mid一直取第一个数,不会取第二个数。所以我们定义好如果目标值和第二个数相等那么我们直接取值。
这就是简单的一个二分查找,主要涉及到的知识点有:
1.递归调用。
2.二分查找的方法。
3.考虑由于除号➗带来的右边边界的特例。

这里数组是正序排列,对于排列问题我这里不多说,因为乱序我们可以进行排序吗!!!但是数组中有重复值呢?我们怎么办?那么就引出来了我们第二个知识点!二分查找有重复值得有序数组。

✨进阶二分查找问题及求解

我们先来看例子:
在一个排序得整数序列中找到目标数,返回该数字出现得最小位置,如果不存在那么返回-1。

示例: 【1,2,2,4,5,5】
target=2 输出: 1
【1,2,2,4,5,5】
target=6 输出:-1

我们还是先来分析一波,思路肯定还是二分查找算法得思路,因为我们这次出现了多个秋香,那么唐伯虎应该选择哪个呢?
其实按照二分算法,上面我们介绍得则是最后确定为一个值,那么这次我们查找剩下两个值得时候就返回,如果前面得和目标数值相等,那么就返回前面得,如果不等就看后面得和它想不想等,如果都不等于,那么返回-1.
在这里插入图片描述

def binary\_chop(nums,t):
    if len(nums)==0:
        return -1
    start=0
    end=len(nums)-1
    while start+1<end:#关键点
        mid=start+(end-start)//2
        if nums[mid]<t:
            start=mid
        else:


![img](https://img-blog.csdnimg.cn/img_convert/5e20b8b48ed49d590e2fa7b7db87dc1b.png)
![img](https://img-blog.csdnimg.cn/img_convert/4c66342770b3f760f2ed56646610e374.png)
![img](https://img-blog.csdnimg.cn/img_convert/e5ff067505f9268630f12b7e57d96206.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值