Python|再认识,二分法

引言

在初步学习认识了二分法后,刷题时还是会觉得解决二分法类题有些难度,看题解也会有很多疑问,下面小编将对疑问多的问题做回答。

问题描述

1.right的初始值到底是len(nums)还是len(nums)-1呢?

2.while循环的条件到底是<还是<=呢?

3.right和left什么时候+1,什么时候-1?

小编将用一个实例来解疑,力扣题-寻找峰值。

峰值元素是指其值大于左右相邻值的元素。

给你一个输入数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设nums[-1] = nums[n] = -∞ 。

示例 1:

输入:nums = [1,2,3,1]

输出:2

解释:3 是峰值元素,你的函数应该返回其索引 2。

示例2:

输入:nums = [1,2,1,3,5,6,4]

输出:1 或 5

解释:你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰值元素为 6。

算法描述

1、首先按照之前学习的二分法查找,定义left和right。这里的right肯定是len(nums)-1,因为无论是left还是right都是做的下标,所以left=0,right=len(nums)-1。
2、While循环的条件如果是left<right时,当left和right的值相等是终止循环的条件,就需要再单独考虑left=right的情况。如果是left<=right时,终止循环的条件就是left+1==right,就不用再考虑left=right的情况。然后就是取mid=(left+right)//2。
3、用if做判断需不需要加一减一,如果是两边闭合的,当你检测mid不是,下一步就检查[left, mid - 1]和[mid + 1, right],如果是左闭右开,当你检查mid不是你想要的值,下一步就检查[left, mid)和[mid + 1, right),所以right不用加1
4、有了上面的基础,写代码就没有太大问题了,大家可以试着自己写写。

结语

通过上面实例,对几个疑问的解答可以得出,二分法查找如何写是由right的取值很决定的,所以需要明白right如何取值,那之后写代码就没有太大问题了。后面小编会继续解答二分法中的疑问、难点。

主编:欧洋

稿件来源:深度学习与文旅应用实验室(DLETA)

(0)

相关推荐

  • 如何使用二分法回滚代码?

    今天是小浩算法"365刷题计划"第70天.你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错 ...

  • Excel单元格里面提取或去掉某些字符

    Excel单元格里面提取或去掉某些字符

  • 二分法深度剖析(第二讲)

    今天是小浩算法"365刷题计划"第67天.继续为大家分享二分法系列篇的内容,看一道比较简单的题目. 01 PART 题目分析 这道题目是比较简单,但我认为同时也是非常经典,建议大家 ...

  • python再谈函数

    python再谈函数

  • Python | 你好,二分法

    引言二分法指的是数学领域的概念,用二分法求函数f(x)零点近似值,这一思想也经常用于计算机中的查找过程中.尤其是当数据量很大适宜采用该方法.二分法查找的思路:(要求数组按升序排列)1.首先,从数组的中 ...

  • Python干货,不用再死记硬背pandas关于轴的概念?

    前言 axis 表示轴,是处理多维数据时用于表示维度方向的概念,在 pandas 中大部分的方法都有 axis 参数,因为 pandas 需要调用者告诉他,需要处理的是哪个维度的数据. 本文将分享我对 ...

  • 别再问我Python打包成exe了!(终极版)

    Py程序打包成exe文件很多同学都会,但是很多人打包完发现:一个简单的Py程序打包成exe文件之后编程几百兆了,今天将带大家学习如何将python脚本打包成10多M的? 那今天就给大家全面总结一下:P ...

  • 再谈Python的引用和变量

    来源:Python 技术「ID: pythonall」 再谈Python的引用和变量 上一次我们介绍了一个有用的代码可视化工具Python Tutor,说到我们还要通过这个工具再探讨一下Python引 ...

  • 用Python写个了红包提醒,再不怕错过一个亿了

    又到了辞旧迎新的时候,群里的红包也多起来了.然而大佬们总是喜欢趁我不在的时候发红包,经常打开手机,发现红包已被抢完,感觉错过了一个亿. 安卓上有不少红包助手工具,但 iOS 似乎没有.而且就算有,这种 ...

  • Python 编程别再用递归了

    递归函数使用起来非常酷,简洁优雅,可以用来炫耀编程技巧.但是,在大多数情况下,递归函数具有非常高的时间和空间复杂性,我们应该避免使用它.更好的解决方案之一是在可能的情况下使用动态规划,对于能够分解为子 ...

  • 调试Python代码,千万别再用Print了!

    Python客栈 2月18日 以下文章来源于法纳斯特 ,作者小F 法纳斯特分享学习Python爬虫.数据分析.数据挖掘的点滴. Hello 大家好- 相信大部分人学习Python,肯定会用print( ...

  • 别再问我Python怎么打包成exe了!

    大家好~之前发布了一篇文章:5 个无聊透顶的Python 程序,之后一直有读者在后台问有关Python脚本打包成exe的问题.今天就推荐给大家一篇文章,全面总结一下:Python如何打包成exe,以及 ...