摘要:
终于到二叉树了,每次面试时最担心面试官问题这块的算法问题,所以接下来就要好好攻克它~ 关于二叉树的定义网上一大堆,这篇做为二叉树的开端,先了解一下基本概念,直接从网上抄袭: 先了解下树的概念,balabala~~: 更通俗的定义: 而二叉树就是树结构的一个经典树,也是要讨论的主题,下面再来看下二叉树 阅读全文
摘要:
什么是2sum问题呢?举个例子就明白了:对于数列:【0、1、2、3、4、5、6、7、8、9】,求两数相加=9的所有两数的组合,所以结果为:【0、9】,【1、8】,【2、7】,【3、6】,【4、5】。所以就是要在一组数据中将结果全部输出出来,说到两个数相加等于某一个数,那也有可能是三个数、四个数相加呀 阅读全文
摘要:
上篇中是用JAVA实现的字符串搜索算法, 这次改用C++来实现,当然在C++就没有像JAVA那样方便的API可以很简便的实现了,其思想跟上篇类似,直接上具体实现代码: 编译运行: 下面分析下流程: 还是以这个用例进行分析: 其中参数str1="abcde",str2="cde": ①、,条件为假,继 阅读全文
摘要:
这里来学习一下从一个源字符串中搜索指定的字符串,有些啰嗦,直接看最终的效果: 实际上JAVA SDK中相当于String.indexOf()方法,上面的用例改用JAVA SDK来实现看一下: 编译运行: 结果一模一样~ 而首先先用JAVA语言去实现这个算法,如何实现呢,下面先来捋一下思路: 如果想从 阅读全文
摘要:
神马是最大公约数呢,反正我这学渣是已经忘着差不多了,借此来复习一下: 上面文字看完是不是还一脸抽象,下面看个图立马就能秒懂: 也就是最大公约数就是相同的商之间相乘得到的数,而最大公约数的英文表示(greatest common divisor,简写为gcd),而求公约数有很多方法,这里学习“辗转相除 阅读全文
摘要:
在正式进入主题之前,对于上一次用递归实现的折半搜索法,这里分析一下它的空间复杂度,在面试做笔记题的时候也是经常会被问到,先贴出上次的实现: 我们知道总的递归产生的时间复杂度是O(log n),而这么多次递归中每次都会有一个middle,也就是有log n个middle,所以说它的空间复杂度S(n) 阅读全文
摘要:
今天开始准备学习搜索相关的算法,首先从折半搜索【也叫二分搜索binary search】开始,这个也是比较简单比较容易理解的,先来看下它的定义: 光文字有些抽象,下面用图来表示整个折半查找的全过程: 对于这样一组数列,比如要查询7这个元素,它的过程如下: 于是乎数据就变成了: 从这一步是不是就能体现 阅读全文
摘要:
上篇中归并排序开启了排序篇章,这次继续学习另外一种非常经典的排序 快速排序【之所有叫快速排序肯定它的效率慢不了】,另外上篇对于归并排序只有实现,木有分析它的时间复杂度,由于它的复杂度跟快速排序的是一模一样的,所以学习快速排序之后直接针对它来计算一下既可,下面正式开启学习之旅: 先来上一张网络上的图有 阅读全文
摘要:
这次终于要开始学习跟生活昔昔相关的算法了,首先映入眼帘的是归并排序,对于什么是归并排序网上文章一大堆,这里再来明确一下,先来看一张原理图【下面会用程序来论证整个如图所示的递归合并过程】: 而看一下归并排序的文字描述,理论跟实践相结合: 对思路清楚之后,下面则具体实现一下,实现方法有两种:递归、非递归 阅读全文
摘要:
接下来要学习跟排序相关的算法了,在正式之前先来个小热身,将两个“已排好序”的链表进行merge操作,先编写一个代码框架,这个比较简单不过多解释: 接着来完善linkedlist类中的方法,对于一个链表通常会有:插入数据、取出数据、弹出数据、判断当前链表是否为空、输出整个链表,下面一一来完善: 接下来 阅读全文