算法与数据结构
文章平均质量分 69
GNin_99
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
平衡二叉树的删除实现---递归
关于平衡二叉树,我查阅了一下资料,在删除部分的实现,目前还不是很完善。于是我自己动手写了一个递归删除,每一部分都做了注释,可以把代码直接拷贝到环境中进行测试。测试代码:public class TestAVLTree { public static void main(String[] args) { AVLTree<Integer> tree = new ...原创 2018-02-27 15:29:52 · 424 阅读 · 0 评论 -
程序员面试金典--题目解析-3.5 实现一个MyQueue类,使用两个栈实现一个队列
3.5 题目:实现一个MyQueue类,使用两个栈实现一个队列解法:使用一个new栈push数据,一个old栈pop或peek数据前提是保证把new栈pop出的所有数据,push进old栈,这样old栈的栈顶存放的就是最旧的数据。另外,为了提高效率,等需要peek或remove时,检测old栈是否为空,old栈为空时,把所有new栈中的数据弹出存入old栈。package Queue; im...原创 2018-04-27 08:15:54 · 869 阅读 · 0 评论 -
程序员面试金典--题目解析-3.4 使用栈实现汉诺塔
3.4 题目:使用栈实现汉诺塔,并将第一座塔的圆盘移动到第三座塔。解法:每一个圆盘都包含三个基本动作假如有5个圆盘,按大小依次放置在第一座塔上,目标塔是第三座塔。针对最大的圆盘来说,第二座塔是缓冲塔,第三座塔是目标塔1、移动该圆盘(5)上的其他所有圆盘(1-4,看做一个整体) 到缓冲塔上2、把该圆盘(5)移动到目标塔3、把缓冲塔上的圆盘(1-4),借助该圆盘原来所在的塔(第一座塔)作为缓冲塔,移动...原创 2018-04-26 17:11:11 · 387 阅读 · 0 评论 -
程序员面试金典--题目解析-3.3 实现数据结构SetOfStacks,维护多个栈
3.3 题目:基础:设想有一堆盘子,堆太高可能会倒下来。因此在现实生活中,盘子堆到一定高度后,我们会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks的push和pop方法应和普通栈逻辑相同,即push加入到最新栈,pop从最新的栈弹出。进阶:实现一个popAt(int index) ...原创 2018-04-26 14:48:48 · 704 阅读 · 0 评论 -
程序员面试金典--题目解析-3.2 设计一个栈,除pop,push方法外,还支持min方法,要求这三个方法的时间复杂度为O(1)
3.2 题目: 设计一个栈,除pop,push方法外,还支持min方法,要求这三个方法的时间复杂度为O(1)解法:1、第一种想法(X):可以在栈类中加入一个minValue的字段,维护最小值。入栈时,更新最小值;出栈时,也需要更新最小值。若最小值被出栈,则需要搜索整个栈,才能找到新的最小值,这不符合O(1)的时间复杂度要求。2、第二种想法(√):按照空间换时间的思路,我们可以考虑每次新的元素入栈时...原创 2018-04-26 10:59:26 · 382 阅读 · 0 评论 -
程序员面试金典--题目解析-3.1 使用一个数组实现三个栈
3.1 题目:使用一个数组,实现3个栈,每个栈大小固定解法:package StackAndQueue; public class StackUsingArr_FixedSize { private int stackSize; private int[] buffer ; private int[] stackPointer; publi...原创 2018-04-26 09:27:17 · 474 阅读 · 0 评论 -
程序员面试金典--题目解析-2.6 给定一个有环链表,实现一个算法返回环路的开头节点
2.6 题目:给定一个有环链表,实现一个算法返回环路的开头节点比如 A--B--C--D--E--C返回C解法:遍历链表,把每个节点的hashcode值(地址值)作为key存入hashMap中,若后续判断存在该key,则证明存在环路,返回该结点public static <E> Node<E> isCircle(Node<E> head){ i...原创 2018-04-25 15:29:54 · 539 阅读 · 0 评论 -
程序员面试金典--题目解析-2.5 编写函数对两个整数求和,整数存放在链表中
2.5 题目:两个链表表示两个数,每个节点表示一个数位。要求实现每位相加,输出结果比如:(7 -->1 -->6) + (5 --> 9 -->2) 即617+295输出:2 --> 1 --> 9 即9121、反向存放2、正向存放(进阶)解法:Node Class定义:public static class Node<E>{ p...原创 2018-04-25 12:18:03 · 468 阅读 · 0 评论 -
程序员面试金典--题目解析-2.4 给定一个x,所有小于x的结点排在大于等于x结点之前
2.4 题目:以给定值x为基准,将链表分隔为两部分。所有小于x的结点排在大于或等于x结点之前。解法:创建两个链表,before和after。依次遍历所给链表,小于x的插入到before之前,大于等于x的插入到after之前。然后连接两个链表即可。链表类:public static class Node<E>{ private E item; priv...原创 2018-04-25 10:53:00 · 450 阅读 · 0 评论 -
程序员面试金典--题目解析-2.2 找出单向链表中倒数第k个结点
2.2 题目:找出单向链表中倒数第k个结点解法:递归版:构造一个int包装类,实现参数传递,都指向同一个int,而不是值传递时复制一份public static class IntWrapper{ public int value = 0; } public static <E> Node<E> nthToLast(Node<E> ...原创 2018-04-24 20:56:45 · 468 阅读 · 0 评论 -
程序员面试金典--题目解析-2.1 移除未排序链表中的重复结点
2.1 题目:移除未排序链表中的重复结点进阶:不使用额外的数据结构解法:使用额外数据结构的解法:遍历链表,如果不存在该key,使用map存储 key为node.item;value为true的数据,如果存在该key则删除该结点public static <E> void deleteDuplicateNode1(Node<E> head){ HashMap...原创 2018-04-24 19:35:45 · 497 阅读 · 1 评论 -
程序员面试金典--题目解析-1.8 给定两个字符串,s1和s2,确定s2是否是s1旋转得到的。
1.8 题目:给定两个字符串,s1和s2,确定s2是否是s1旋转得到的。比如:s1 = waterbottle;s2 = erbottlewat;另,提供了一个判断是否是子串的方法isSubstring(a,b) 以检验b是否是a的子串解法:1、取s2的第一个字符,在s1中找到第一次出现的位置,然后截断s1 s2 比如:先拿出e 找到在s1中的位置,截断s1 为 erbottle 和 wat;截...原创 2018-04-23 16:47:36 · 2304 阅读 · 0 评论 -
程序员面试金典--题目解析-1.7 若M*N矩阵中某个元素为0,则将其所在的行和列清零
1.7 题目:编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行和列清零。解法:遍历两次矩阵,使用两个布尔数组记录应该被清零的行和列,第一次遍历,记录下需要被清零的。第二次遍历,清零即可。public static void setZeros(int[][] matrix){ boolean[] rows = new boolean[matrix.length]; ...原创 2018-04-23 16:11:47 · 1297 阅读 · 0 评论 -
程序员面试金典--题目解析-1.6 左旋右旋N阶矩阵
1.6 题目:给定一个N*N阶的矩阵,左或右旋转90度,不要使用额外的空间。解法:最优的复杂度为O(N^2)左旋代码:public static void rotateRight(int[][] matrix,int n){ for(int layer = 0;layer< n/2;layer++){ int first = layer; ...原创 2018-04-23 15:35:38 · 322 阅读 · 0 评论 -
程序员面试金典--题目解析-1.5 字符串压缩功能
1.5 题目:字符串压缩功能。比如:给定字符串“aabbbbccaadd” 输出"a2b4c2a2",若压缩后的字符串没有变短,则输出原来字符串。O(N) 解法:利用StringBuffer构建新的字符串public static String compressDuplicate(String str){ if(str == null || str.length() == 0) ...原创 2018-04-23 14:08:53 · 308 阅读 · 0 评论 -
程序员面试金典--题目解析-1.3 判断一个字符串是否是其他字符串的变位串
1.3 题目:给定两个字符串,判断其中一个字符串重新排列后,能否变成另外一个字符串。假定:区分大小写,空格也要考虑在内。ASCII字符集解法:1、先排序两个字符串,再比较排序后的字符串public static boolean permutation(String s,String t){ if(s == null || t == null) retur...原创 2018-04-23 10:49:09 · 221 阅读 · 0 评论 -
程序员面试金典--题目解析-1.1 确定一个字符串的所有字符是否相同
1.1 题目:确定一个字符串的所有字符是否相同?1)可以使用额外的数据结构2)不使用额外的数据结构解法:1、将字符串中的每一个字符和其余字符进行比较,时间复杂度O(n^2) 空间复杂度O(1)代码如下:public static boolean isUniqueChars(String str){ for(int i=0;i<str.length();i++){ ...原创 2018-04-23 09:42:32 · 451 阅读 · 0 评论 -
程序员面试金典--题目解析-3.6 对栈进行排序
3.6 题目:对栈进行排序,要求最大的值存放在栈顶。基础:只能使用一个额外的栈存储临时数据。进阶: 允许使用多个栈或其他数据结构,将时间复杂度优化为O(nlog(n))解法:基础解法,下面画图分步骤说明:初始状态:S1为未排序的栈,S2为空栈 S1 S2 5 null 10 null 7 null弹出栈顶...原创 2018-04-27 09:55:13 · 233 阅读 · 0 评论
分享