摘要:什么是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类中的方法,对于一个链表通常会有:插入数据、取出数据、弹出数据、判断当前链表是否为空、输出整个链表,下面一一来完善: 接下来
阅读全文
摘要:在上一篇中已经介绍了用链表实现约瑟夫环的问题,博文:http://www.cnblogs.com/webor2006/p/7102568.html 其实它还有一种更加简便更加容易理解的实现方式,那就是用数组,当然这两种实现方式的时间复杂度一样,其实现思路跟用链表的基本上类似,下面整理一下: 首先用数
阅读全文
摘要:什么是约瑟夫环问题? 而这实际上就是一个经典的数学问题: 而用一个更生活化的例子来阐述:几个人围坐在一张圆桌上,然后开始数数,数到指定数则淘汰,然后再重1开始数,直到还剩最后一个人则为胜利者。 而具体代码如何来实现呢? 首先还是基于上次的那个链表进行扩展: 接着构造一个循环链表,为了使代码更加的清晰
阅读全文
摘要:之前学习了关于reverse数组相关的东东(http://www.cnblogs.com/webor2006/p/6727419.html),这次再来对链表进行reverse一下,在面试中也很容易被问到,而对于reverse链表有两种实现方式:递归方式和非递归方式,下面具体来实现下。 递归方式: 首
阅读全文
摘要:说到递归算法,应该无人不知,那怎么算递归算法的时间复杂度,我想应该不一定每个人都知道了,所以下面来学习学习。 对于递归算法举例,最经典的就是斐波那契数列了,而它的定义也贴一下: 下面用代码来实现它: 不多解释,因为比较容易,下面来看下输出结果: 那该递归算法的时间复杂度是多少呢?应该时间耗得不多吧,
阅读全文
摘要:这篇主要是对数组实现一个倒排序(比如数组1、2、3,最后输出3、2、1),当然实现这个功能是非常easy的事,但是这里需要引入另外一个很重要的概念 如何计算一个算法的时间复杂度并学会用大O表达式。我记得之前有次面试,面试官让我写一个查找算法题,经过细心苦想后最终我简单的把它写出来了,然后面试官问我你
阅读全文
摘要:对于面试来说,数据结构与算法一直是被问,可对于实际项目开发中把它们都抛得很远,所以就有这样一个现象:在一家公司呆久了突然某些原因不得不面临找工作了(可能是自身为了更高的发展,也有可能是面临公司裁员等一些情况),突然发现有点不知所措,因为面试跟公司开发完全是不一样的侧点重,而其中最头疼的就是关于数据结
阅读全文