算法与数据结构
文章平均质量分 55
96岁对抗java
喜欢上层框架原理、更喜欢底层原理的研究, 同样感兴趣的小伙伴有问题交流, 欢迎评论区或者私信进行讨论。
展开
-
单调队列
改题目其实说白了就是一个区间求和的问题, 一维数组的区间求和比较简单, 二维数组的区间求和其实还是有一定难度的。因为我们定义的preSum[i]表示的是前i + 1项的前缀和, 那么我们如何用一个差值来表示前2项?原创 2023-02-15 19:56:12 · 235 阅读 · 0 评论 -
循环双端队列
【代码】循环双端队列。原创 2023-02-15 19:55:15 · 67 阅读 · 0 评论 -
并查集
package com . ffyc . algorithm . 并查集;//获取并查集分组数目 int getSize();//合并 void union(int p , int q);//判断是否连接 boolean isConnected(int p , int q);原创 2023-02-15 19:53:29 · 70 阅读 · 0 评论 -
位运算Pow(double x , int n)
那么都有哪些位运算?~ 取反& 与|或^ 异或>) 右移 —> 这里因为打不出来>>所以就加了一个()(>>>) 无符号右移这里给大家普及一个小知识, -(负号)x在底层是如何实现的?原创 2023-02-15 19:51:15 · 129 阅读 · 0 评论 -
分治算法
分治法是一个很重要的算法, 字面上的解释是: “分而治之”, 就是把一个复杂的问题分成两个或者更多相同或者相似的子问题, 再把子问题分成更小的子问题, 直到最后子问题可以简单的直接求解, 原问题的解即子问题的解的合并, 这个技巧是很多高效的算法的基础(如: 排序算法(快速排序, 归并排序), 傅里叶变换(快速傅里叶变换) )原创 2023-02-15 19:47:45 · 43 阅读 · 0 评论 -
用栈实现二叉树的前序遍历 [迭代法]
【代码】用栈实现二叉树的前序遍历 [迭代法]原创 2023-02-15 19:48:04 · 366 阅读 · 0 评论 -
深入理解快速排序
单轴快排到双路快排到三路快排递进原创 2023-02-15 19:46:11 · 59 阅读 · 0 评论 -
计数排序 [数据结构与算法][Java]
【代码】计数排序 [数据结构与算法][Java]原创 2022-12-24 13:37:51 · 516 阅读 · 1 评论 -
morris算法(莫里斯遍历) [数据结构与算法]
Morris算法, 我们最常用于解决二叉树的遍历问题, 以及与遍历相关的一些问题(其实在二叉树系列问题中, 我们解决各种问题的时候都要涉及到一个对二叉树的遍历)使用递归解决二叉树的遍历本质其实很简单, 我们只需要编写一个递归方法, 在其中先进行向左遍历, 遍历到最后之后开始向右遍历, 这样我们对于我们递归到的结点就会有一个打印时机的区分:(如下: )一个节点(包括叶子结点), 肯定是会经过三次, 第一次就是向左遍历或者向右遍历的过程中, 第二次和第三次就是向左和向右遍历完成之后回溯的时候各会遍历到一次, 而原创 2022-12-24 13:36:01 · 893 阅读 · 0 评论 -
B+树 [数据结构与算法][Java]
每个分支结点至多有m颗子树根节点要么没有子树, 要么至少有两颗子树除了根节点以外, 其他每个分支结点(非叶子结点)至少有Math.celi(m / 2)个子树, 每个分支结点至少有Math.celi(m / 2)个关键字注意: 这里我们一定要注意我们B+树中的结点中的关键字的个数是和子节点的个数是相同的,并且都是Math.celi(m / 2)所有叶子结点包含全部的关键字以及指向相应的记录的指针而且叶子结点中是按照关键字大小顺序连接的, 并且所有的叶子结点是连接在一个单链表上的。原创 2022-12-24 13:32:30 · 482 阅读 · 0 评论 -
B树(B-树) [数据结构与算法][Java]
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMEpUByG-1671859765528)(E:\非凡英才\数据结构(java)]\数据结构图解\B树中每个结点的结构.png)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xmYTtv51-1671859765527)(E:\非凡英才\数据结构(java)]\数据结构图解\三阶B树举例.png)没有B-树, 所谓的B-树就是B树, 只有B树, B+(加)树, B*(星)树。原创 2022-12-24 13:30:28 · 673 阅读 · 0 评论 -
AVL树的实现(代码实现 + 测试) [数据结构与算法]
【代码】AVL树的实现(代码实现 + 测试) [数据结构与算法]原创 2022-12-24 13:27:25 · 182 阅读 · 0 评论 -
AVL树中旋转算法的调用
【代码】AVL树中旋转算法的调用。原创 2022-11-22 21:00:53 · 96 阅读 · 0 评论 -
AVL树左旋转,右旋转代码实现
【代码】AVL树左旋转,右旋转代码实现。原创 2022-11-22 21:00:02 · 199 阅读 · 0 评论 -
AVL树高度求解
因为我们之前讲过了左旋转, 右旋转, 双旋转, 但是在实际编码中会有一个问题: 我们要确定LL型, LR型, RR型, RL型最小不平衡子树时需要, 所以这里我们首要问题就是要求解对应结点的左右子树的高度差, 其实就是求树的高度后再作差。原创 2022-11-22 20:59:18 · 599 阅读 · 0 评论 -
AVL双旋转思路分析与图解
当最小不平衡子树为LR型或者RL型的时候, 那么什么时候最小不平衡子树是RL型或者什么时候又是LR型的?原创 2022-11-22 20:58:37 · 353 阅读 · 0 评论 -
AVL右旋转思路分析与图解
注意: 整个过程中根节点是没有变的, 只是根节点的值发生了改变。原创 2022-11-22 20:55:55 · 442 阅读 · 0 评论 -
AVL树左旋转算法思路与图解
那么要如何处理?原创 2022-11-22 20:53:59 · 240 阅读 · 0 评论 -
平衡二叉树
AVL树的名字来源于它们的发明作者G.M.delson-elsky和E.M.andisAVL树是最先发明的自平衡二分查找树, 简称平衡二叉树。原创 2022-11-22 20:52:38 · 340 阅读 · 0 评论 -
Trie树的实现(思路分析)
我们的Trie树是一个多叉树, 而不是一个二叉树, 所以结点类中的子节点不止有左右子结点, 子节点有多个, 因此我们一般都是直接声明一个子节点数组我们此时是要做一个单词字典树, 所以这个树最多是一个26叉树, 所以我们的子节点数组长度都定为26即可。原创 2022-11-22 20:49:48 · 377 阅读 · 0 评论 -
Trie(字典树, 前缀树)
又叫做字典树, 前缀树(prefixTree), 单词查找树或键树, 是一种多叉树结构。原创 2022-11-20 21:12:32 · 322 阅读 · 0 评论 -
线段树的实现(代码实现)
【代码】线段树的实现(代码实现)原创 2022-11-20 21:11:57 · 158 阅读 · 0 评论 -
线段树的实现(思路分析)
parent的value等于两个child之和叶子结点存储输入的数组元素()非叶子结点是存储的某个区间上的元素的和。原创 2022-11-20 21:11:21 · 276 阅读 · 0 评论 -
线段树
parent的value等于两个child之和叶子结点存储输入的数组元素()非叶子结点是存储的某个区间上的元素的和。原创 2022-11-20 21:10:26 · 329 阅读 · 0 评论 -
最大优先队列(代码实现)
优先队列原创 2022-11-20 21:09:47 · 148 阅读 · 0 评论 -
最大优先队列的实现(思路分析) [数据结构与算法]
我们每次插入一个元素到堆中的最后一个位置, 然后使用一个上浮算法就可以了就是让某个位置的元素上浮到应该存在的合理位置。原创 2022-11-20 21:08:53 · 254 阅读 · 0 评论 -
优先队列概述 [数据结构与算法]
优先队列原创 2022-11-20 21:08:16 · 92 阅读 · 0 评论 -
二叉排序树删除结点操作(代码实现) [Java]
*** 测试方法, 测试我们编写的二叉排序树类中的方法是否是正确的//创建一个二叉排序树类 BinarySortTree binarySortTree = new BinarySortTree();//我们先创建几个结点 Node node1 = new Node(2);//然后调用我们添加结点的方法将我们节点添加到我们的二叉排序树类中 binarySortTree . add(node1);原创 2022-11-20 21:07:03 · 762 阅读 · 3 评论 -
二叉排序树查询删除结点和删除结点的父节点(代码实现) [Java]
【代码】二叉排序树查询删除结点和删除结点的父节点(代码实现) [Java]原创 2022-11-14 21:00:53 · 180 阅读 · 0 评论 -
二叉排序树的删除操作的实现(思路分析)
这其实就是因为我们链表是一个单分支结构, 我们删除的时候只要找到待删除的父节点之后让父节点指向待删除结点的下一个节点即可, 但是此时我们是在执行二叉树结构的删除操作, 我们二叉树删除结点的因为不仅仅一个分支, 二叉树有两个分支, 所以删除之前我们要先确定我们当前结点是做父节点的左子节点还是右子节点, 判断之后我们还要知道我们当前结点是否有子节点, 就要继续遍历判断, 所以。, 但是这个时候对于树结构为什么删除的时候不仅仅要找到带删除结点的父节点, 还要找到待删除结点?如果targetNode有左子节点。原创 2022-11-14 20:59:52 · 341 阅读 · 0 评论 -
二叉排序树的创建, 遍历,添加操作(代码实现) [Java]
*** 测试方法, 测试我们编写的二叉排序树类中的方法是否是正确的//创建一个二叉排序树类 BinarySortTree binarySortTree = new BinarySortTree();//我们先创建几个结点 Node node1 = new Node(2);//然后调用我们添加结点的方法将我们节点添加到我们的二叉排序树类中 binarySortTree . add(node1);原创 2022-11-14 20:58:43 · 471 阅读 · 0 评论 -
二叉排序树的创建与添加操作(思路分析)
如果我们使用的是思维扩展中的第二中方式来实现添加的操作的时候就不会有这样的问题了。原创 2022-11-14 20:57:58 · 777 阅读 · 0 评论 -
二叉排序树(BST)
二叉排序树: BST(Binary Sort Tree), 也称之为: 二分搜索树(Binary Search Tree)对于二叉排序树的任何一个非叶子结点,要求左子节点的值都要比当前值小, 右子节点的值比当前节点的值大注意: 如果有相同的值, 可以将该相同的值放到左子节点或者是右子节点上注意: 如果构建的时候将相同的值放到了右子节点上, 那么我们后面做删除结点操作或者是其他操作的时候判断如果出现了结点值相同的情况的时候就要也去右子树上去找。原创 2022-11-14 20:57:06 · 184 阅读 · 0 评论 -
哈夫曼树的创建(代码实现) [Java]
注意: 我们如果ArrayList集合中只有两个数据了,这个时候如果我们要通过索引删除ArrayList集合中的剩余的两个数据, 这个时候如果我们通过索引删除, 这个时候我们一定要注意: 我们先要删除集合中的索引为1的结点, 然后删除集合中索引为0的结点 ----> 如果我们先删除索引为0的结点然后删除集合中索引为1的结点这个时候就会出现索引越界异常, 那么为什么会出现索引越界异常?原创 2022-11-14 20:56:02 · 126 阅读 · 0 评论 -
哈夫曼树的创建(代码实现) [Java]
注意: 我们如果ArrayList集合中只有两个数据了,这个时候如果我们要通过索引删除ArrayList集合中的剩余的两个数据, 这个时候如果我们通过索引删除, 这个时候我们一定要注意: 我们先要删除集合中的索引为1的结点, 然后删除集合中索引为0的结点 ----> 如果我们先删除索引为0的结点然后删除集合中索引为1的结点这个时候就会出现索引越界异常, 那么为什么会出现索引越界异常?原创 2022-11-14 20:55:32 · 424 阅读 · 0 评论 -
赫夫曼树的创建(思路分析)
从小到大进行排序,将有一个数据(每一个数据其实就是一个节点)看做是一颗最简单的二叉树取出根节点权值最小的两颗二叉树(其实就是取出权值最小的两个结点)用第2步中的两个二叉树组成为一颗新的二叉树, 该新二叉树的根节点的权值是前面两颗二叉树根节点的权值之和再将这颗新的二叉树, 以根节点的权值大小再次排序, 不断重复1 - 2 - 3 - 4的步骤, 直到数列中, 所有的数据都被处理, 就得到一颗赫夫曼树。原创 2022-11-14 20:54:47 · 319 阅读 · 0 评论 -
赫夫曼树
给定n个权值作为n个叶子结点, 构造一颗二叉树, 若该树的带权路径长度(WPL)达到最小, 称这样的二叉树为最优二叉树, 也称为: 哈夫曼树(Huffman Tree)赫夫曼树是带权路径最短的树。原创 2022-11-14 20:53:52 · 187 阅读 · 0 评论 -
堆排序[代码实现] [算法与数据结构][Java]
【代码】堆排序[代码实现] [算法与数据结构][Java]原创 2022-11-14 20:52:01 · 73 阅读 · 0 评论 -
堆排序[思路分析] [Java][数据结构与算法]
(arr.length - 1) = 2x + 1 或者是 (arr.length - 1) = 2x + 2。原创 2022-11-13 23:17:36 · 77 阅读 · 0 评论 -
遍历线索化二叉树(代码实现) [数据结构与算法][Java]
中序遍历的过程:(先遍历左位置, 再遍历中位置, 最后遍历右位置)那么其实我们的线索化二叉树的中序遍历的过程其实和普通的中序遍历的过程差不多: 只是我们找到位置的方式不同, 但是遍历的顺序肯定是相同的, 仅仅是因为线索化之后结点的指针域发生了改变。原创 2022-11-02 19:21:16 · 100 阅读 · 0 评论