随笔分类 -  算法

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