| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法提升(一)二分法 -> 正文阅读 |
|
[数据结构与算法]算法提升(一)二分法 |
一. 二分法的介绍1. 有序数组中找一个值
这个题目就是一个经典的二分查找运用问题 想一想 假如说给了我们一个有序的数组 我们从头到尾遍历的话 最差的情况下是怎么才会找到这个数呢? 是不是这个数在末尾的时候啊 这个时候的时间复杂度是O(N) 那么这个时候就可以用到我们的二分法了 既然说这个数组是有序的 我们假设是这样子 我们从中间开始找 假设这个8是我们的要找的元素的话 我们直接返回这个下标就可以了 假如不是的话 我们比较下这个数和我们要找的数的大小 如果这个数大于我们要找的数 是不是整个数组的右边我们就不要了啊 这样每次减少一半是不是时间复杂度就是Log(N)啊 之后我们继续重复这个过程 直到我们的左下标大于我们的右下标的时候是不是就表明我们要找的这个数不存在啊 我们来看看代码是怎么表示的
代码也是很简单 简单写一下就可以了 这里注意的有一点 就是关于mid的变化
此外还可以试试这种写法
2. 寻找有序数组中大于某个数的位置
这道题目也是一个经典的二分问题 想想看是不是和上面查找某个值的思路很相似啊 我们首先找到中间值 如果这个值大于我们的key值 我们的右边就不要了 并且确认它符合条件之后将这个index值记录下来 最后返回用 (我们下面就直接打印index的位置 方便大家理解整个过程) 最后结束的时候 我们直接返回最后记录的一个index位置就好啦 代码表示如下
整体表示如下 3. 在有序数组中找到小于某个数的位置思路相似 改变一下大于小于号还有记录index的情况就可以了 代码表示如下
运行结果如下 4. 无序数组中寻找一个局部最小值
这里的思路用的也是二分法 具体是什么思路呢? 我们来看 我们先比较最前的一个数和后面一个数 如果最前面的一个数小于它后面的一个数 是不是它就是一个局部最小值啊 如果比较了最前面的数和它的后一个数之后发现 它不是一个局部最小值 我们就比较最后面的数和最后面 的数的前面一个数 如果说最后面的数比它前面的一个数要小 那么是不是我们就能够找到最后面一个数是局部最小值啊 如果说上面的两次判断都不满足 那么我们的数组是不是就是一个这样子的状态 那么不管它怎么连 是不是一定会出现一个局部最小值啊
之后我们继续找左边的二分 是不是继续重复这个步骤啊 代码表示如下
我们只要重复这样简单的循环就能够找到局部最小值啦 演示结果如下 总结
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:48:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |