08 2021 档案

摘要:题目:给你一个栈,请你逆序这个栈 package Algorithms.ViolenceRecursive; import java.util.Stack; public class ReverseStackUsingRecursive { //逆序栈 public static void reve 阅读全文
posted @ 2021-08-16 12:41 zh_小猿 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题目:打印一个字符串的全部序列,不能出现重复的排序 package Algorithms.ViolenceRecursive; import java.util.ArrayList; public class PrintAllPermutations { public static ArrayLis 阅读全文
posted @ 2021-08-16 11:42 zh_小猿 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题目:打印一个字符串的全部子序列,包括空字符串 solution: 对于字符串的每一个元素,我们都可以选择要或者不要: 代码: package Algorithms.ViolenceRecursive; public class PrintAllSubsquences { public static 阅读全文
posted @ 2021-08-16 09:47 zh_小猿 阅读(120) 评论(0) 推荐(0) 编辑
摘要:暴力递归就是尝试 1,把问题转化为规模缩小了的同类问题的子问题2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 一定要学会怎么去尝试,因为这是动态规划的基础 汉罗塔问题 打印n层汉诺塔从最左边移动到最右边的全部过程 实现 阅读全文
posted @ 2021-08-15 22:46 zh_小猿 阅读(65) 评论(0) 推荐(0) 编辑
摘要:public static class IdAscendingComparator implements Comparator<Student> { //返回负数的时候,第一个参数排在前面 //返回正数的时候,第二个参数排在前面 //返回0的时候,谁在前面无所谓 @Override public i 阅读全文
posted @ 2021-08-15 20:36 zh_小猿 阅读(108) 评论(0) 推荐(0) 编辑
摘要:题目 有一个源源不断往外吐出整数的数据流,假设你有足够的空间来保存吐出的数。 请设计一个方法,这个方法可以随时取出之前吐出所有数的中位数 solution 1、建立一个大根堆和一个小根堆 2、首先往大根堆中添加一个数字 3、再次添加数字时,如果该数字<=大根堆堆顶的数字,就把该数字放入大根堆中,否则 阅读全文
posted @ 2021-08-15 17:10 zh_小猿 阅读(172) 评论(0) 推荐(0) 编辑
摘要:题目: 输入: 正数数组costs :costs[i]表示i号项目的花费 正数数组profits :profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润) 正数k :能串行的最多做k个项目 正数m :初始的资金 输出:你最后获得的最大钱数。 solution: 1、建立一个小根堆(被锁池 阅读全文
posted @ 2021-08-15 14:43 zh_小猿 阅读(93) 评论(0) 推荐(0) 编辑
摘要:题目: 一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管切成长度多大的两半,都要花费20个铜板。 问:一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60。 金条要分成10,20,30。如果先把 阅读全文
posted @ 2021-08-15 13:44 zh_小猿 阅读(532) 评论(0) 推荐(0) 编辑
摘要:题目:给定一个字符串的数组strs,实现一种拼接顺序,使得所有的字符串拼接起来组成的字符串是所有可能性中字典序最小的,并返回这个字符串。 相关知识: Java compareTo() 方法 字符串与对象进行比较。 按字典顺序比较两个字符串。 一、什么是字典序 ①若字符串长度相等:“abc”和“bck 阅读全文
posted @ 2021-08-15 12:53 zh_小猿 阅读(343) 评论(0) 推荐(0) 编辑
摘要:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 贪心算法的在笔试时的解题套路 1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试2,脑补出贪心策略A、贪心策略B、贪心策略C.. 3,用解法X和对 阅读全文
posted @ 2021-08-15 12:37 zh_小猿 阅读(82) 评论(0) 推荐(0) 编辑
摘要:何为前缀树?如何生成前缀树? 例子:一个字符串类型的数组arr1,另一个字符串类型的数组arr2。arr2中有哪些字符,是arr1中出现的?请打印。arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印。arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印arr2中出现次数 阅读全文
posted @ 2021-08-14 12:52 zh_小猿 阅读(38) 评论(0) 推荐(0) 编辑
摘要:是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。 迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 要求:图中不能有累加和为负数的环 思路: 代码: package Algorithms.Graph 阅读全文
posted @ 2021-08-13 21:35 zh_小猿 阅读(237) 评论(0) 推荐(0) 编辑
摘要:1、两种算法都针对无向图2、目的:生成最小生成树 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。 一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树, 阅读全文
posted @ 2021-08-13 18:53 zh_小猿 阅读(371) 评论(0) 推荐(0) 编辑
摘要:1、有向图中依次找到所有入度为0的点,把这些点输出,再把这些点的影响(由这个先散发出的线)擦掉 2、在剩下的图中肯定还有入度为0的点,循环步骤1 代码实现: package Algorithms.Graph; import java.util.ArrayList; import java.util. 阅读全文
posted @ 2021-08-13 16:45 zh_小猿 阅读(99) 评论(0) 推荐(0) 编辑
摘要:一、图的宽度优先遍历 1,利用队列实现 2,从源节点开始依次按照宽度进队列,然后弹出 3,每弹出一个点,把该节点所有没有进过队列的邻接点放入队列4,直到队列变空 代码实现: //从node出发,进行宽度优先遍历 public static void bfs(Node node) { if (node 阅读全文
posted @ 2021-08-13 16:09 zh_小猿 阅读(499) 评论(0) 推荐(0) 编辑
摘要:一、为什么要有图 二、图的常用概念 三、图的表示方法 1、邻接矩阵 2、邻接表 四、图的快速入门案例 五、图的表示方式 图的结构表示方式有很多,当遇到其它表示方式时,可以把图转化为以下结构再进行后续操作 package Algorithms.Graph; import java.util.HashM 阅读全文
posted @ 2021-08-13 14:23 zh_小猿 阅读(36) 评论(0) 推荐(0) 编辑
摘要:微软原题 请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次。 阅读全文
posted @ 2021-08-12 21:46 zh_小猿 阅读(189) 评论(0) 推荐(0) 编辑
摘要:就是内存里的一棵树如何变成字符串形式,又如何从字符串形式变成内存里的树 如何判断一颗二叉树是不是另一棵二又树的子树? 序列化、反序列化 //以head为头的树,序列化成字符串返回 public static String serialByPre(Node head) { if (head == nu 阅读全文
posted @ 2021-08-12 21:24 zh_小猿 阅读(27) 评论(0) 推荐(0) 编辑
摘要:在二叉树的中序遍历的序列中,node的下一个节点叫作node的后继节点。 该结构比普通二又树节点结构多了一个指向父节点的parent指针。假设有一棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确地指向自己的父节点,头节点的parent指向null。只给一个在二叉树中的某个节点n 阅读全文
posted @ 2021-08-12 20:19 zh_小猿 阅读(84) 评论(0) 推荐(0) 编辑
摘要:题目:给定两个二叉树的节点node1和node2,找到它们的最低公共祖先节点 o1和o2的所有结构关系分为两类: 1、o1是o2的最低公共祖先,或o2是o1的最低公共祖先 2、o1与o2不互为最低公共祖先,最低公共祖先是通过往上汇聚寻找的 //返回两节点的最低公共祖先节点 public static 阅读全文
posted @ 2021-08-12 19:19 zh_小猿 阅读(124) 评论(0) 推荐(0) 编辑
摘要:方式一:容易理解但麻烦的做法 1、先写一个函数统计整个二叉树的最大深度(最大层数) l 2、再写一个函数去统计整个二叉树的节点个数 N 3、满二叉树满足N=2l-1 方式二:树型DP 递归套路解决 package Algorithms.tree; public class IsFullTree { 阅读全文
posted @ 2021-08-12 16:59 zh_小猿 阅读(42) 评论(0) 推荐(0) 编辑
摘要:一、什么是平衡二叉树 定义:对于任何一个子树来说,它左右数的高度差的绝对值不超过1 二、二叉树的递归套路 在求解二叉树问题的时候,列可能性:假设可以向左/右树要信息的情况下,利用左右树的信息解决问题。 例如: 如果一个二叉树是平衡二叉树,列举可能性: 1)左子树是平衡二叉树 2)右子树是平衡二叉树 阅读全文
posted @ 2021-08-12 15:46 zh_小猿 阅读(587) 评论(0) 推荐(0) 编辑
摘要:若设二叉树的深度为k,除第k层外,其它各层(1至k-1)的节点数都达到了最大个数,第k层所有的节点都连续几种在最左边,这就是完全二叉树 思路:按照宽度遍历进行改进 1)在遍历的过程中如果存在任何一节点有右节点,无左节点,返回false 2)在第1个条件成立的情况下,遇到了第一个左右孩子不相全的情况, 阅读全文
posted @ 2021-08-12 15:10 zh_小猿 阅读(512) 评论(0) 推荐(0) 编辑
摘要:什么是搜索二叉树? 可知,如果对二叉搜索树进行中序排列(左中右),那么会得到一个从小到大的序列。 因此,如果用中序遍历搜索二叉树,肯定是一个升序的过程 判断一颗二叉树是否是搜索二叉树可以用中序遍历(递归/非递归)代码进行改写 package Algorithms.tree; import java. 阅读全文
posted @ 2021-08-12 14:32 zh_小猿 阅读(276) 评论(0) 推荐(0) 编辑
摘要:一、如何实现二叉树的宽度遍历 宽度遍历用队列(先进先出) 1)先把头节点放入队列中 2)每次弹出一个,打印 3)对于弹出的节点,先把弹出节点的左节点放入队列、再把其右节点放入队列(没有左右节点就不放) 重复以上三个步骤 //宽度遍历 public static void w(Node head){ 阅读全文
posted @ 2021-08-12 12:51 zh_小猿 阅读(768) 评论(0) 推荐(0) 编辑
摘要:一、递归方式遍历 递归方法完成二叉树的遍历,每一个节点都能回去3次(虽然某一次回去的时候什么也没干) 在递归序的基础上,选择打印的时机不同可演变出前序、中序、后续三种遍历方式 前序-打印递归遍历时第1次出现的数字(头左右):1,2,4,5,3,6,7 中序-打印递归遍历时第2次出现的数字(左头右): 阅读全文
posted @ 2021-08-12 10:07 zh_小猿 阅读(126) 评论(0) 推荐(0) 编辑
摘要:【题目】给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的第一个节点。如果不相交,返回null 【要求】如果两个链表长度之和为N,时间复杂度请达到0(N),额外空间复杂度请达到0(1)。 一、先判断一个单链表是否有环 1、哈希表,往哈希表 阅读全文
posted @ 2021-08-11 20:29 zh_小猿 阅读(127) 评论(0) 推荐(0) 编辑
摘要:【题目】一种特殊的单链表节点类描述如下 class Node{ int value; Node next; Node rand; Node(int val){ value = val; } } rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null。给定一 阅读全文
posted @ 2021-08-11 17:29 zh_小猿 阅读(90) 评论(0) 推荐(0) 编辑
摘要:【题目】给定一个单链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。 笔试:构建一个Node型数组,将单链表中的节点添加进数组中,在数组中进行 阅读全文
posted @ 2021-08-11 15:53 zh_小猿 阅读(97) 评论(0) 推荐(0) 编辑
摘要:题目:给一个数组arr=[2,7,9,3,1,8,5,2,5] 给定数字5,把数组中的数按照<5,=5,>5进行排列 >arr=[2,2,3,1, 5,5, 8,9,7] 代码: package Algorithms; /** * @author : zhang * @version : 1.0 * 阅读全文
posted @ 2021-08-11 13:10 zh_小猿 阅读(122) 评论(0) 推荐(0) 编辑
摘要:代码: package Algorithms; public class PrintCommonPart { public static class Node { public int value; public Node next; public Node(int data) { this.val 阅读全文
posted @ 2021-08-10 21:25 zh_小猿 阅读(35) 评论(0) 推荐(0) 编辑
摘要:判断一个数是否回文数 【题目】给定一个单链表的头节点head,请判断该链表是否为回文结构。 【例子】1->2->1,返回true;1->2->2->1,返回true;15->6->15,返回true;1->2->3,返回false。 【例子】如果链表长度为N,时间复杂度达到0(N),额外空间复杂度达 阅读全文
posted @ 2021-08-10 21:16 zh_小猿 阅读(65) 评论(0) 推荐(0) 编辑
摘要:力扣 package Algorithms; /** * @author : zhang * @version : 1.0 * @date : Create in 2021/8/1 * @description : */ public class RemoveDuplicates { public 阅读全文
posted @ 2021-08-01 20:33 zh_小猿 阅读(27) 评论(0) 推荐(0) 编辑