
数据结构与算法
张燕茹
宁静以致远
展开
-
两个有序非重数组,如果查找数组之间的重复元素
题目描述:(原文来自:http://blog.youkuaiyun.com/insistgogo/article/details/9228015)两个元素递增且不重复的数组A和B,查找数组之间的重复元素,并放到其他数组C中。举例:A数组 : 1、3、5、7、10B数组 : 2、3、4、5、6程序输出C数组:3、5。注意,这里的方法都不涉及哈希。方法:方法 1:二路归并思路:转载 2014-12-16 17:36:38 · 1397 阅读 · 0 评论 -
树及树的遍历(一)
树(Tree)树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂:当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字?树这种结构还可以表示成下面这种方式,可见树用来描述包含关系是很不错的,但这种包含关系不得出现交叉重叠区域,否则就不能用树描述了,看图:面试的时候我们经常被考到的是一种转载 2016-09-19 14:11:52 · 1181 阅读 · 0 评论 -
Java设计模式之代理模式
什么是代理模式?代理模式,一般是为了对真正的对象进行访问限制,延时实例化等,举一个例子:生活中,书籍厂家生产书并且出售书,但是,如果你想买书的话,一定要到书籍厂家买吗?不是的,我们可以通过大大小小书店购买。在这里,书籍厂家就是RealObject,它有一个方法sell();书店就是代理对象ProxyObject,它也有一个方法sell(),这个方法通过调用realObject的se原创 2016-09-14 11:08:05 · 510 阅读 · 0 评论 -
为什么重写equals一定要重写hashCode
一、为什么要有Hash算法Java中的集合有两类,一类是List,一类是Set。List内的元素是有序的,元素可以重复。Set元素无序,但元素不可重复。要想保证元素不重复,两个元素是否重复应该依据什么来判断呢?用Object.equals方法。但若每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说若集合中已有1000个元素,那么第1001个元素加转载 2016-09-13 13:53:08 · 712 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难转载 2016-09-13 13:39:00 · 422 阅读 · 0 评论 -
爬楼梯问题迭代算法解!
有一段楼梯有10级台阶,规定每一步只能跨一级或两级或三级,要登上第10级台阶有几种不同的走法? 思路:0节楼梯: 1 (0) 1节楼梯: 1 (1)2节楼梯: 2 (11、 2)3节楼梯: 4 (111、 12、 21、 3)抽象f(n)=f(n-3)+f(n-2)+f(n-1) 递归法性能 stat原创 2016-08-31 18:45:44 · 2061 阅读 · 0 评论 -
单例模式的七种写法
转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton instance; private Singleton (){} public stati转载 2016-08-04 18:50:05 · 587 阅读 · 0 评论 -
用两个队列实现栈
转自:http://blog.youkuaiyun.com/renlei0109/article/details/52105908思路 假设有两个队列Q1和Q2,当二者都为空时,入栈操作可以用入队操作来模拟, 可以随便选一个空队列,假设选Q1进行入栈操作,现在假设a,b,c依次入栈了(即依次进入队列Q1), 这时如果想模拟出栈操作,则需要将c出栈,因为在栈顶,这时候可以考虑用空队列Q2,将a,转载 2016-08-03 18:58:31 · 565 阅读 · 0 评论 -
通过两个栈实现队列
原理思想: 建两个栈,stackNewest和stackOldest。 要始终保持:newStack的栈顶总是存放着最新的元素,oldStack的栈顶总是存放着最旧的元素。因为我们放新数据的时候是放入newStack,而取数据的时候是从oldStack去取。 而且为了尽量减少栈之间的倒腾,只有在必须时(peek或pop)才倒腾栈。 建立两个栈,一个newStack如果有新的值来转载 2016-08-03 17:43:05 · 597 阅读 · 0 评论 -
树及树的遍历(二)-----二叉树前序、中序、后序遍历非递归写法的透彻解析
递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的:?1234567//Binary Tree Nodetypedef struct node转载 2016-09-19 17:18:36 · 2504 阅读 · 0 评论