随笔分类 - 数据结构和算法
摘要:我们都知道一个栈的特点是后进先出,如果我们要实现在O(1)的时间内找到一个栈里面的最小值,我们应该怎么解决?如果我们采用遍历获取的思路那必然所需要的时间是O(N)与我们所需要的要求明显不符合,这时候我们通常需要采用的是和前面我们介绍到的栈的压入弹出序列相类似,采用辅助栈的思想。我们不妨构建一个辅助栈
阅读全文
摘要:当时我在学习这个的时候也是非常不理解这个问题,一个栈的压入和弹出序列的判断一看不就知道了么,还去判断干嘛。只要符合后进先出的规则就行。但是我在这里简单说一下这个压入和弹出序列是怎么回事。就是我们给定假设的两个序列,一个为压入序列,一个为弹出序列。然后我们再通过一个辅助的栈,把压入序列的数据一个一个p
阅读全文
摘要:今天我们需要学习的是关于数据结构里面经常看到的两种结构,栈和队列。可以说我们是一直都在使用栈,比如说在前面递归所使用的的系统的栈,以及在链表倒序输出时介绍的自定义栈类Stack和使用系统的栈进行递归。那么,在这里我们就讲述一下这两个比较具有特色的或者说关系比较紧密的数据结构之间的互相实现问题。 一:
阅读全文
摘要:在前面介绍了关于链表的一系列问题,这里我们在介绍一下关于单向链表的反转这个比较具有代表性的算法。在进行反转的时候一定要记住多画图,多去理解在链表进行反转的时候它对于地址的改变,这和数组的数据对换具有很大的不一致。 重要的事情说三遍,地址转换很重要!地址转换很重要!地址转换很重要! 关于单向链表的删除
阅读全文
摘要:我们在刚遇到这个问题的时候可能最迅速的想法就是把两个链表进行遍历,第一个链表next一下,对第二个链表就进行遍历,查找是否有相同的节点,如果有,那么就是交点,没有就不是。这样可不可以实现我们的功能,答案是当然可以,没有一丝一毫的问题,那么我们可以思考一下这个思路,它所需要的时间花销是不是应该为O(M
阅读全文
摘要:我们前边已经讨论了关于单向链表的简单功能增删改查的实现,以及通过两个指针获取倒数k个节点以及合并两个有序链表的方法,接下来我们需要讨论的是有关于单向链表的环问题。一个链表是否有环的存在,如果有环那么我们的环的长度是多少,它的起点又在哪里,这都是我们需要考虑的问题。现在我们讨论第一个问题,判断一个链表
阅读全文
摘要:我们以前在介绍排序算法的时候介绍过一种排序算法叫做归并排序,我们现在需要思考一个问题,能不能利用归并的思想对两个有序的单向链表进行合并。 请把这个方法放在单向链表的第一篇基础方法里面进行测试即可,我们通过代码可以很清楚的观察到通篇利用的就是归并的思想,对于两个有序链表的整合。但是我们在这里需要提出注
阅读全文
摘要:我们在做算法的时候或多或少都会遇到这样的问题,那就是我们需要获取某一个数据集的倒数或者正数第几个数据。那么今天我们来看一下这个问题,怎么去获取倒数第K个节点。我们拿到这个问题的时候自然而然会想到我们让链表从末尾开始next K-1 次不就是第K-1个节点了么,但是必须要注意一点,这是单向链表。那么这
阅读全文
摘要:链表在我们java中也是一种基础的数据结构,可以理解成是一种和数组同级的数组结构,正如我们所知,在我们使用这集合ArrayList和LinkedList的时候,总会学习底层数组实现的ArrayList和双向链表实现的LinkedList的区别。在这里,我们将要讲说的是单向链表的简单实现,让我们体会一
阅读全文
摘要:经过前面五篇排序方法的介绍,我们了解到了递归思想以及分而治之的归并和快速排序,当然也涉及到了比较简单易懂的数据值传递冒泡,选择,以及插入排序。可以说每一种排序方式都各有千秋,都适合在不同的环境下进行使用,但是我们有时会不会思考一个问题,那就是我们在学习插入排序的时候的主题思想是将每一个数据取出来,然
阅读全文
摘要:我们上一篇谈到了冒泡排序,其实我也说了,这两个排序方式何其相似,如果掌握了冒泡排序再来进行选择排序的理解我觉得完全没有太大的问题。那么什么叫做选择排序呢?我们可以理解为矮子里面挑高个,比如说呀有一个富翁来到了一个村庄,看见一群女的,这时候他是不是会把自己的老婆拿出来比较,遇到更好看的是不是要带走,直
阅读全文
摘要:我们在学习排序算法的时候或许很多人接触到的都是冒泡和选择这两种排序算法,其实真的可以说的是这两种算法确实是比较经典的排序方法,同时,在我的理解中,这两个排序具有惊奇的相似点。何为冒泡排序,如果我们在家煮过水都能知道,在水即将沸腾的时候会有一个又一个的水泡往上冒,这个现象其实和冒泡排序还是比较相似的,
阅读全文
摘要:我们在前面两篇文章中介绍了两种排序方式,归并排序和快速排序,但是我们可以知道的是这两种排序针对的都是数据比较复杂的情况下我们使用分而治之的思想和递归的解决方式,那么入过我们的数据量比较小的情况下也是用牛刀杀鸡么?答案是否定的,这里将会介绍一种比较简单的排序方式,插入排序。其实我们在看到这个名字的时候
阅读全文
摘要:上一篇文章我们讲完了归并排序,对于分而治之和递归思想应该都有了一定的理解,这篇文章我们将介绍道被认为是排序算法中最容易出错,但是又是最喜欢使用的一中排序方式,快速排序。对于快速排序而言我们必须抓住几个关键点就是基准值的选取,以及它在递归思想的运用过程中需要注意的事项。我们先看下面的图片了解一下快速排
阅读全文
摘要:我们不得不承认一个事实,java学习过程中如果我们掌握了各种编程手段和工具,确实可以做一些开发,这就是一些培训机构敢告诉你几个月就能掌握一门语言的原因。但是随着时间的发展,我们总会感觉,这一类人如果不提升自己,最后也只会是一个码农。技术会日新月异,随时在发展更新换代,但是这几十年,有谁说过算法会过时
阅读全文