算法题解
Kenny_Xu_00101854
佛了,不喊全栈,只会后端
展开
-
解密二叉搜索树(Binary Search Tree)
解密二叉搜索树(Binary Search Tree)Part 1 理论部分一、综述二、实现原理三、主要算法Part 2 实践部分一、Python版本二、Java版本Part 1 理论部分一、综述二叉搜索树(Binary Search Tree),又名二叉查找树,二叉排序树:它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。二叉搜索原创 2021-09-03 19:23:22 · 442 阅读 · 0 评论 -
【递归典例】汉诺塔问题
题目描述:汉诺塔由三根柱子(分别用A、B、C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。算法思想:不用想的太复杂,只需要考虑第n个盘子和前n-1个盘子的放置问题即可,其他的交给程序去处理就OK~算法实现:#include<cstdio>原创 2021-03-12 17:03:56 · 401 阅读 · 0 评论 -
【数据结构】手撕图的相关数据结构与算法
文章目录一、Graph抽象类的定义二、图的邻接矩阵实现一、Graph抽象类的定义/** * Graph抽象类 */public abstract class Graph { //用整型数的最大值表示极限 protected static int INFINITY = Integer.MAX_VALUE; //枚举图的种类 public enum Kind { DG, //有向图 DN, //有向网 UDG, //原创 2021-01-24 21:53:14 · 439 阅读 · 0 评论 -
【数据结构】手撕自平衡二叉树(Adelson-Velsky-Landis Tree)
文章目录综述第一步 构建结点类第二步 实现结点添加方法(重点)第三步 实现结点删除方法(重难点)第四步 实现结点的查找方法第五步 实现平衡二叉树的遍历算法(先、中、后、层次)第六步 AVL树平衡算法的实现(重难点)完整代码实现调试代码及运行结果备注:实现语言为C#(.NET Core),语法和Java别无二致综述AVL树是二叉搜索树(Binary Search Tree)的升级版,主要就是为了解决BST在插入有序序列时会退化成链表、使查找性能由 O(logn)O(logn)O(logn) 变为 O(n原创 2021-01-22 11:25:13 · 524 阅读 · 0 评论 -
【数据结构】手撕二叉查找树(Binary Search Tree)
文章目录第一步 构建结点类第二步 实现结点添加方法第三步 实现结点的删除方法(重难点)第四步 实现结点的查找方法第五步 实现二叉树的先序遍历算法第六步 实现二叉树的中序遍历算法第七步 实现二叉树的后序遍历算法第八步 实现二叉树的层次遍历算法(难点)完整代码实现调试代码及运行结果备注:实现语言为C#(.NET Core),语法和Java别无二致第一步 构建结点类class Node{ public int data { get; set; } public Node Left { ge原创 2021-01-21 18:28:24 · 296 阅读 · 0 评论 -
【数据结构】手撕串的模式匹配算法
使用String内置的方法实现模式匹配:public static int index(String str, String find) { String sub; for (int i = 0; i <= str.length() - find.length(); ++i) { sub = str.substring(i, i + find.length()); if (find.compareTo(sub) == 0) return i; ..原创 2021-01-17 23:59:20 · 114 阅读 · 0 评论 -
【蓝桥杯】基础练习之杨辉三角
杨辉三角记得在学C语言的时候老师带着写过一次,但已经忘的差不多了。今天正好回忆一下:题目描述:杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。给出n,输出它的前n行(1≤n≤341\le n \le 341≤n≤34)核心算法:用二维数组实现。除了第一行以及左右两边值为1,其他位置的值都等于其顶部元素的值加上其左上角元素的值代码实现:import java.util.Scanner;public clas原创 2021-01-13 21:48:53 · 247 阅读 · 0 评论 -
【蓝桥杯】基础练习特殊回文数满分解法
仅需循环103=100010^3=1000103=1000次即可找到所有符合要求的回文数哦!具体思路:分别从0~9遍历i,j,k三层循环(i+j)×2+k=n(i+j)\times2+k=n(i+j)×2+k=n代表五位十进制回文数,即 ijkjii j k j iijkji(i+j+k)×2=n(i+j+k)\times2 = n(i+j+k)×2=n代表六位十进制回文数,即ijkkjiijkkjiijkkji每找到一个符合条件的特殊回文数就存到ArrayList中,最后进行排序并输出具体原创 2021-01-09 18:43:32 · 210 阅读 · 0 评论 -
【蓝桥杯】入门训练Fibonacci数列满分解法
着重考虑数据类型,边界值import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); long a = 1L, b = 1L, result, sum = 0L; // 如果为前2项则将结果设为1原创 2021-01-08 13:13:56 · 184 阅读 · 0 评论 -
【蓝桥杯】基础练习十六进制转八进制满分解法
本来想偷懒用Java的 Long.parseLong(str, 16) 来将字符串转为十进制数,进而转八进制数。结果因为长度不够产生溢出,万般无奈只好从头开始写进制转换整体思路就是:十六进制字符串转二进制字符数组二进制字符数组转八进制字符数组输出结果因为报的是Java组,所以没考虑C++实现。不过感觉还是写的复杂了些,后面有时间再看看怎么优化吧!具体代码:import java.util.ArrayList;import java.util.Scanner;public class原创 2021-01-08 22:38:03 · 232 阅读 · 0 评论