- 博客(14)
- 收藏
- 关注
原创 python3 堆
完全二叉树一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。完全二叉树判定算法思路判断一棵树是否是完全二叉树的思路:如果树为空,则直接返回错 如果树不为空:层序遍历二叉树 如果一个结点左右孩子都不为空,则pop该节点,将其左右孩子入队列; 如果遇到一个结点,左孩子为空,右孩子不为空,则该树一定不是完全二叉树; 如果遇到一个结点,左孩子不
2020-07-23 13:31:38
233
原创 3-2 数组中常见问题-解决方法-对撞指针
167. 两数之和 II - 输入有序数组给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] ...
2020-07-12 19:15:09
214
原创 3-1 从二分查找法看如何写出正确的程序
如何写出正确的程序设定“循环不变量”,即我们寻找的数据索引一定在该范围中:[l .. r]。 数组中可查找的数据的索引范围为:[0, n-1],前闭后闭。 设置循环结束条件:当 l <= r,区间 [l ... r] 依然是有效的,数组中仅包含一个元素 设置返回条件: arr[mid] == target,返回mid arr[mid] > target,target在 [mid+1 ... r]中 arr[mid] <target,target在 [l ....
2020-07-05 20:46:21
189
原创 2-6 均摊时间复杂度分析
均摊时间复杂度分析动态数组 Vector将上述操作都放在push这个方法中:每当数组容量满了之后,需要再分配一倍的内存,并将之前的旧数据存到新数组中。数据量为n时,该push方法的均摊时间复杂度为O(1)。用大数据量做测试,随着数据量的递增,算法的事件复杂度线性增加,验证完成。...
2020-07-04 16:55:30
197
原创 2-5 递归算法的复杂度分析
递归算法的复杂度分析不是有递归的算法的时间复杂度都为O(nlogn)!递归中进行一次递归调用的复杂度分析如果递归函数中,只进行一次递归调用,递归深度为depth;在每个递归函数中,时间复杂度为T;则总体的时间复杂度为O(T * depth)递归中进行多次递归调用的复杂度分析归并排序用的就是分治法的思想,数组长度为n,每层计算的事件复杂度为O(n),树的深度为O(logn),因此总的时间复杂度为O(nlogn)。主定理主定理,归纳了递归函数的时间复杂
2020-07-04 16:18:18
276
原创 2-2 对数据规模有一个概念
数据规模的概念如果想要在1s内解决问题:O(n^2)的算法可以处理大约10^4级别的数据 O(n)的算法可以处理10^8级别的数据 10^8 = 1亿 O(nlogn)的算法可以处理10^7级别的数据 log2^9 = 20.723算法可能还有较大的系数,所以保险一点的话,可以将上述级别的数据量除以2,或者是10。c++,累加1亿条数据,大约需要花费0.4s的时间。python,累加1亿条数据,大约需要花费4s的时间空间复杂度多开一个辅助的数组:O(n) 多开一个辅助的二..
2020-07-03 15:14:35
337
原创 2-1 面试中的时间复杂度分析
面试中的时间复杂度分析到底什么是大On表示数据规模O(f(n))表示运行算法所需要的执行的指令数,与f(n)成正比。举例二分查找法 O(logn) 寻找数组中的最大值/最小值 O(n) 归并排序 O(nlogn) 选择排序 O(n^2)到底什么是大O在学术界,严格地讲,O(f(n))表示算法执行的上界。归并排序算法的时间复杂度是O(nlogn),也是O(n^2)。在业界,我们使用O表示算法执行的最小上界。所以我们不会说归并排序算法的事件复杂度是O(n^2),都是说O(nl
2020-07-03 13:58:45
173
原创 1-4 如何回答算法面试官问题
解决算法面试问题的整体思路注意题目中的条件给定一个有序数组 可以考虑用二分查找法 有一些题目中的条件本质是暗示 设计一个O(nlog(n))的算法 ——> 8成会使用分治法,也可能先排序,再做剩余的操作 无需考虑额外的空间 ——> 可以考虑开辟额外的空间,用空间换时间 数据规模大概是10000 ——> 可以考虑设计一个O(n2)的算法,因为O(nlogn)的算法可以处理百万级或千万级的数据 当没有思路...
2020-07-03 12:59:40
139
原创 1-3 如何准备算法面试
如何准备算法面试准备面试和准备算法面试是两个概念算法面试,只是面试中的一个环节。算法面试并没有那么难远远不需要啃完一本《算法导论》《算法导论》强调理论证明,而这些证明可能是很困难的,在实际中的用途并不大。高级的数据结构和算法,面试中提及的概率很低。红黑树 B-Tree 斐波那契堆 计算几何 数论 FFT远远不需要达到信息学竞赛的水平不要轻视基础算法和数据结构,而只关注“有意思”的题目各种排序算法 基础数据结构和算法的实现:如堆、二叉树..
2020-07-03 08:04:44
177
原创 1-2 算法面试只是面试的一部分
算法面试优秀不意味着技术面试优秀面试过程中,需要按照以下几个方面做好准备:项目经历,项目中遇到的实际问题 你遇到的印象最深的Bug是什么? 面向对象 设计模式 网络相关 安全相关 内存相关 并发相关 系统设计,Scalability 等等技术面试优秀不意味着能拿到Offer技术面试只是面试的一部分。面试不仅仅考察你的技术水平,还是了解你的过去以及形成的思考行为方式。关于过去,参与的项目至关重要如何找到项目?参与实战课程学习 慕课网 Cour...
2020-07-03 07:42:48
161
原创 1-1 算法面试不仅仅是正确的回答问题
算法面试不仅仅是正确的回答问题在面对面试中的算法问题时,有一个合理的思考路径面对算法面试,不要畏惧。因为面试中的算法问题,通常并不复杂,远远不需要啃完一本《算法导论》算法面试是什么?不代表能够正确回答每一个问题,在面对问题时,一个合理的思考路径更重要,这也是正确完成算法面试的前提。什么是合理的思考路径?算法面试的目的不是正确回答每一个问题,而是展示给面试官一个你思考问题的方式,如何去解决问题的。“正确”本身是一个相对的概念算法面试不是高考。可以把...
2020-07-03 07:26:44
203
原创 【信息论】《吴军—信息论30讲》学习笔记(三):条件熵和信息增益:你提供的信息到底值多少钱?
之前,吴军老师介绍了信息的正交关系,也就是寻找能够互补信息的重要性。之后,又介绍了互信息,讲了两条不同信息之间的相关性。这一讲,我们更加系统地、量化地分析一下,如果别人你提供了一条信息,到底有多大的价值。下面用信息理论对这个问题做一个比较严格的分析。我们假定,股市的涨跌是个随机变量,用X表示,对于她的全部的不确定性,就是X概率分布所对应的的信息熵,通常用H(X)表示。如果你得到了一些内...
2019-09-10 10:34:38
548
原创 【信息论】《吴军—信息论30讲》学习笔记(二):信息正交性 在信息很多的情况下如何作决策?
这一讲,吴军老师用告诉你,当你面对信息很多时,如何利用和组合信息,提高自己的决策水平。首先,信息和能量具有一定的相关性,但是它们的性质完全不同,比如信息并不具有守恒的特点。你将一条信息告诉别人,你自己并不损失这条信息。除此以外,不同信息彼此之间的关系,以及使用相同或者不同信息带来的结果,它在这些方面和能量也完全不同。我们今天就从信息和能力的对比出发,谈三个获得有效信息和利用好信息的要点...
2019-09-09 10:39:42
1149
原创 【信息论】《吴军—信息论30讲》学习笔记(一):冗余度 史记和圣经哪个信息量大
吴军老师根据自己的经验,善用信息冗余,总结如下三点体会:1、讲东西要通过加入一些看似是废话,但是实际上能从侧面诠释你的想法的句子,帮助对方理解你的意思。比如我常说“换句话说”,“比如说”,“从另一方面讲”这样的话,这就是利用信息的冗余便于大家理解。2、讲东西要有一致性,不要补充有可能和主要思想相矛盾的例子,或者和想法无关的冗余信息。3、在我们脑子存储信息时,要进行压缩,这样脑子才能记得...
2019-09-04 10:14:24
1159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人