数据结构与算法
文章平均质量分 70
在地球迷路的怪兽
此时情绪此时天,无事小神仙。
展开
-
代码随想录刷题记录:回溯算法篇
前言本专题主讲回溯。回溯算法个人理解77. 组合题目描述:思路分析:回溯的经典题目,理解回溯了就能做出来,具体过程参考卡尔大哥的思路。代码如下:class Solution { //定义两个全局变量 List<List<Integer>> res = null;//存放全部结果集合 LinkedList<Integer> path = null; //存放条件单一的结果 public List<List&原创 2022-02-10 21:37:27 · 1145 阅读 · 0 评论 -
代码随想录刷题记录:二叉树篇(第二部分)
236. 二叉树的最近公共祖先题目描述:思路分析:反正我现在对递归都还很懵…多练叭只能是。卡尔大佬的思路还是能看懂的,就是自己做的时候实在是想不到。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }原创 2022-02-06 22:10:09 · 529 阅读 · 0 评论 -
代码随想录刷题记录:二叉树篇(第一部分)
前言哈哈哈,到二叉树啦!冲冲冲!!!因为好久没看二叉树了,就先复习一下吧(下图全部来自代码随想录)。对二叉树几个类型概念的简单介绍:满二叉树完全二叉树二叉搜索树平衡二叉搜索树(即AVL树)对二叉树的两种存储形式进行简单介绍:链式存储顺序存储用链式表示的二叉树,更有利于我们理解,所以一般我们都是用链式存储二叉树。144. 二叉树的前序遍历(递归和迭代两种方式)题目描述递归方法思路分析:很简单了,二叉树基础题目。递归方式代码如下:/** * Definition原创 2022-02-06 15:21:47 · 1264 阅读 · 0 评论 -
代码随想录刷题记录:栈和队列篇
前言这篇就到栈和队列啦~~~加油加油!奥利给!232. 用栈实现队列思路分析:卧槽这个我一遍就过了,感觉只有这么简单了,只要明白栈和队列的特性就可以了。具体看代码注释就没什么问题了。代码如下:class MyQueue { //我们需要先声明两个栈 Stack<Integer> stack1; Stack<Integer> stack2; //在构造函数中对两个栈进行初始化 public MyQueue() {原创 2022-01-25 22:29:35 · 361 阅读 · 0 评论 -
代码随想录刷题记录:字符串篇
前言字符串篇啦!344. 反转字符串题目描述:思路描述:之前其实说过,一般情况下对于数据的线性操作我们都可以采用多指针法来做(一般双指针即可),本题一样,我们使用一个left指向最左边,一个right指向最右边,然后我们从两边往中间进行遍历,每遍历一个就进行一次交换即可。代码如下:class Solution { public void reverseString(char[] s) { //双指针法 int left = 0; int原创 2022-01-24 22:39:43 · 519 阅读 · 0 评论 -
代码随想录刷题记录:哈希表篇
前言本篇是哈希表啦。242. 有效的字母异位词思路分析:其实这个题比较简单,(我踏马一开始想复杂了,竟然想用HashMap),看了题解才发现有一个更加精妙的做法,就是用一个数组来装字符串中每个字母出现的个数,因为题目说了都是小写字母,所以我们只需要申请一个26大小的数组空间(数组也是哈希表的一种),然后下标用s[i]-'a’来表示(注意这里只能减a,因为减其他的值肯定就小于(为负值了,比如a-z就小于0了)我们的数组下标了呀)。因为a到z的ASCII码在内存是连续的,那么我用字符串中的每一位字符去原创 2022-01-21 20:26:19 · 1056 阅读 · 0 评论 -
代码随想录刷题记录:链表篇
前言本篇为代码随想录的第二篇,链表篇。203. 移除链表元素题目描述:思路:LeetCode这个题还是有很多陷阱的,我之前写过类似的一遍就过了而这次栽了很多坑。首先我们要知道要删除的值可能有很多个,其次要知道头结点也可能是我们要删除的节点,也有可能在头结点之后几个节点都是我们要删除的,最后要记得我们的最后一个节点也可能是我们要删除的。综上,代码如下,注释很详尽了:/** * Definition for singly-linked list. * public class ListNo原创 2022-01-17 18:15:24 · 482 阅读 · 0 评论 -
代码随想录刷题记录:数组篇
前言这篇博客应该会持续更新,我用来记录自己刷代码随想录(就是Carl)大佬写的那本书的题目,如果有想一起学习的自行搜索代码随想录即可。其中题目开头的数字为该题在LeetCode中的序号。还有就是,我喜欢思路写在代码中,懂我意思叭。数组篇704二分查找:这是一道非常经典的二分查找题,比较水的那种,懂二分的基本都能直接写出来,我直接写自己的题解了:class Solution { public int search(int[] nums, int target) { in原创 2022-01-14 23:30:33 · 746 阅读 · 0 评论 -
图、图的DFS以及BFS遍历
图的基本介绍和存储形式图的创建图解和代码实现我们的顶点使用tring类型,用ArrayList来保存;矩阵我们使用一个二维数组int[][]edges来实现。代码实现:package 图;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;public class GraphDemo { //存储顶点集合(存储A、B、C、D、E) private Arr原创 2021-11-13 16:09:38 · 399 阅读 · 0 评论 -
平衡二叉树左旋转、右旋转以及双旋转实现
平衡二叉树左旋转思路分析思路分析:平衡二叉树预准备代码package 树.平衡二叉树;public class AVLTreeDemo { public static void main(String[] args) { int[] arr = {4,3,6,5,7,8}; //创建一个AVL树 AVLTree tree = new AVLTree(); //添加节点 for (int i = 0; i..原创 2021-11-11 14:55:14 · 669 阅读 · 0 评论 -
二叉排序树(BST)的增删改查实现
二叉排序树介绍以上图中的12为例,12先与根节点7比较,发现比7大则继续与7的右子节点10比较,发现比10也大但是此时10的右子节点为空,所以12节点就挂在10的右子节点上。又以1为例,1先与7比较,发现1比7小,于是向左查找子节点3,发现比3也小,那么就继续往左比较,因为3号节点的左子节点为空了1所以此时1节点就正好挂在3的左子节点位置上。二叉排序树创建和遍历package 树.二叉排序树;public class BinarySortTreeDemo { public stati原创 2021-11-11 13:15:39 · 507 阅读 · 0 评论 -
赫夫曼树以及赫夫曼编码实现
介绍赫夫曼树创建图解思路一直找就找到最好的样子:赫夫曼树创建代码实现package 树;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class HuffmanTree { public static void main(String[] args) { int[] arr = {13,7,8,3,29,6,1};原创 2021-11-10 13:31:01 · 272 阅读 · 0 评论 -
二叉树实现增删改查以及线索化二叉树详解
为什么需要树二叉树介绍二叉树遍历节点思路分析及代码实现代码实现:package 树;public class BinaryTreeDemo { public static void main(String[] args) { //测试 //创建节点 HeroNode root = new HeroNode(1,"宋江"); //宋江作为根节点传入树中建树 HeroNode n2 = new HeroNode(2原创 2021-11-09 14:44:15 · 306 阅读 · 0 评论 -
哈希表介绍以及代码实现
哈希表问题引入哈希表基本介绍为什么需要哈希表?由上图可以看出,在实际开发中,我们为了加快Java程序与数据库的读写速率,通常会在两者之间加一个缓存层,比如现有的产品可以使用redis等nosql类型数据库,有时候项目比较小觉得使用这个太重量级,那么我们是可以使用哈希表来代替redis的。常见的我们会使用数组+链表实现哈希表,或者使用数组+二叉树也可以。哈希表实现思路以及代码实现这里我们使用哈希表来解决一下刚刚用来引入哈希表的谷歌的上机题,那么这里我们先给出思路:问题:哈希表说白了就是原创 2021-11-08 01:07:07 · 1083 阅读 · 0 评论 -
查找算法大集合
查找算法集合线性查找算法线性查找就没啥说的了,巨简单。二分查找算法二分查找其实我在专门将数组那章时就已经写过一次了,我就再写一次吧,就当复习了。简易代码实现:package 查找;public class BinarySearch { public static void main(String[] args) { //注意使用二分查找时,查找的数列必须是有序的 int[] arr = {1,8,10,89,1000,1234};原创 2021-11-07 23:24:44 · 112 阅读 · 0 评论 -
排序算法大集合
前言关于排序算法这一章,大家可以去一个叫visualGo的网站查看动态的数据结构视频来进行学习会好学很多,我这里给出源码,然后大家去那个网站上看对应的动图就很好理解啦。网站:https://visualgo.net/zh排序算法的介绍其中必须必须必须掌握的三个排序算法,是直接插入排序、简单选择排序以及最常见的冒泡排序,也是在学校里面要求必须掌握的,就是背你也得背下来。关于算法复杂度这个我直接就贴一个大佬的链接了,写的近乎完美,好好看肯定都能看懂:https://www.cxyxiaowu.c原创 2021-11-07 16:44:30 · 130 阅读 · 0 评论 -
递归机制解析及例题展示
递归的概念简单的说,递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归的调用机制看代码:package 递归;public class recursion { public static void main(String[] args) { //通过打印输出test方法,解释递归的机制 test(4); } public static void test(int n){原创 2021-11-06 15:59:26 · 113 阅读 · 0 评论 -
线性数据结构之链表、链表栈、链表队列、双向链表、循环链表以及约瑟夫环问题解决
前言本章详细阐述了链表这一种线性数据结构的使用方法以及相关操作。单链表如图所示,链表是由一个又一个节点连起来的,而每一个节点又是有一块数据域和一块指针域合起来的。其中数据域即存放的这个节点的数据,指针域则指向了下一个节点的地址空间。这一块稍微需要xdm有点基础才行,实在理解不了就看代码多去找东西学习就完事儿了,慢慢儿就上道了。代码实现:...原创 2021-11-06 13:52:40 · 199 阅读 · 0 评论 -
线性数据结构之数组、数组栈、数组队列以及稀疏数组实现
前言本章详细阐述了数组这一种线性数据结构的使用方法以及相关操作。数组的基本使用方法下面程序示范了数组的基本使用方法。package 数组;public class 数组的基本使用 { public static void main(String[] args) { //创建一个数组 int[] arr1 = new int[3]; //获取数组长度 int length1 = arr1.length; //打原创 2021-11-04 14:50:56 · 95 阅读 · 0 评论