数据结构与算法
文章平均质量分 63
张永星666
甲蛙第十二代传人
展开
-
最长重复子数组
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出:3 解释: 长度最长的公共子数组是 [3, 2, 1] 。 public class Solution { public int findLength(int[] A,int[] B){ int[][] dp = new int[A.length][B.length]; int max = Integer原创 2021-07-13 17:23:26 · 507 阅读 · 0 评论 -
树的代码套路总结
文章开始我先再默念一下口诀,关于树一切的基础你一定要直到: 先序:根左右 中序:左根右 后序:左右根 还有更为重要的路线图,如果脑子对遍历路线很清除那递归什么的各种代码也迎刃而解: //闲了用手画算了,自己画的太抽象了 二叉树的遍历: 递归: //先序遍历 public void preOrder() { System.out.println(this); // 先输出根 if (this.left != null) { //先向左 this.left.preOrder(); } if原创 2021-04-19 15:40:31 · 134 阅读 · 0 评论 -
二叉树的深度和广度优先
深度优先(借助栈): Depth First Search,对每一个分支路径深入到不能再深入为止,如图所示的二叉树遍历结果为:ABDECFHG private static void dfs(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode p原创 2021-04-18 17:14:59 · 295 阅读 · 0 评论 -
常用的十种算法
1.分治与二分查找 1.1分治算法介绍 分治法即“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 分治算法可以求解的一些经典问题 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔 1.2分治算法基本步骤 分治法在每一层递归上都有三个步骤:原创 2021-04-11 15:49:39 · 4764 阅读 · 1 评论 -
二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 提示: 节点总数 <= 10000 其实之前在学习平衡二叉树的时候就已经研究过这个问题了,平衡二叉树其子树的高度是其一个重要信息变量,两个子树的高度差是否超过1决定其是否要进行旋转调整,当时写的原创 2020-12-13 21:20:12 · 91 阅读 · 0 评论 -
图
1.图基本介绍 1.1为什么要有图 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图 1.2图的常用概念 顶点(vertex) 边(edge) 路径 无向图(右图) 无向图: 顶点之间的连接没有方向,比如A-B,即可以是 A-> B 也可以 B->A 路径:比如从 D -> C 的路径有D->B->C 和D->A->B->C 有向图:顶点之间的连接有方向,比如A-B,只能是原创 2020-11-23 18:22:24 · 405 阅读 · 0 评论 -
多叉树(多路查找树)
1.二叉树与 B 树 1.1二叉树存在的问题 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题: 问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响 问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度 1.2多叉树的基本介绍 在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更原创 2020-11-23 18:17:30 · 1502 阅读 · 1 评论 -
二叉树
一.树的常用术语 节点 根节点 父节点 子节点 叶子节点 (没有子节点的节点) 节点的权(节点值) 路径(从 root 节点找到该节点的路线) 层 子树 树的高度(最大层数) 森林 :多颗子树构成森林 二.满二叉树与完全二叉树 如果该二叉树的所有叶子节点都在最后一层, 并且结点总数= 2^n -1, n 为层数, 则我们称为满二叉树 如果该二叉树的所有叶子节点都在最后一层或者倒数第二层, 而且最后一层的叶子节点在左边连续, 倒数第二层的叶子节点在右边连续, 我们称为完全二叉树 三.二叉树的遍历 代码思路原创 2020-11-23 18:14:48 · 190 阅读 · 0 评论 -
BST与AVL
树形结构的实际应用 介绍两种树形结构的实际应用,BST和AVL可能相对比较重要,单独放在这里,其实哈夫曼树,堆排序都算树形结构的实际应用 1.BST二叉排序树(左小右大的树) 1.1二叉排序树需求 需求分析: 给你一个数列 { 7, 3, 10, 12, 5, 1, 9 } ,要求能够高效的完成对数据的查询和添加。 解决方案: 1.使用数组 1).数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢 2).数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到原创 2020-11-23 18:16:07 · 1206 阅读 · 0 评论 -
顺序存储二叉树和线索二叉树
1.顺序存储二叉树 1.1顺序存储二叉树的概念 1.1.1顺序存储二叉树与数组的转换 基本说明:从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可 以转换成树,树也可以转换成数组。 要求: 右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6] 要求在遍历数组 arr时,仍然可以用前序遍历,中序遍历和后序遍历的方式完成结点的遍历 1.2顺序存储二叉树的特点 顺序存储二叉树特点: 顺序二叉树通常只考虑完全二叉树 顺序存储二叉树中第 n 个元素的左子原创 2020-11-23 18:18:05 · 315 阅读 · 0 评论