| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构和算法(2)断更一段时间,寒假开始更新 -> 正文阅读 |
|
[数据结构与算法]数据结构和算法(2)断更一段时间,寒假开始更新 |
目录 查找最大值利用二分查找通过递归来找最大值 首先将数组通过中间元素arr[mid]将数组分为两个部分,两个部分分别递归,直到找到最大值 本质是一个多叉树,在计算树的所有的节点的时候,利用栈玩了一个后序遍历,每一个节点都通过自己的子节点给自己汇总信息之后才能够继续向上返回,栈空间就是整棵树的高度只需要在一个高度上进行压栈,这就是一个递归的过程 代码
master公式 只要满足子问题具有相同规模的递归都可以用master公式 ?总结 归并排序O(nlgn)可以运用master公式来求解 左边先排好序,右边先排好序,左右merge在一起,整体就有序了 每一次的比较行为没有被浪费,每次比较最后会变成一个新的有序的数组,这种变成了有序的的东西,信息是往下传递的,正式因为这样它变成了O(n*lgn) 代码
小和问题1 3 4 2 5 1的左边没有比1小的数,所以小和为零 3的左边有1,所以小和是1 4的左边有3和1 ,所以小和是4 2的左边是1,小和是1 5的左边是1 3 4 2 所以小和是10 所以整个数组的小和是16 暴力解决很轻松,两层for循环就解决了,只不过时间复杂度是O(n2) 我们可以换一种思路来解决这个问题 看被查看的数字的右边有几个比他大的,有几个就算这个出现几次小和 如? 1 出现的次数是4次 3出现的次数是2次 4出现的次数是1次 2出现的次数是1次 5出现的次数是0次 加起来也是16 所以这个可以用归并排序来进行解决 又与归并排序有一点不同,当左边的数等于右边的数的时候将左边的数放进外排序的数组里面,如果不这样做,就会不知道右边有多少个数比左边与右边相等的那个数大 ?代码
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 7:37:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |