
数据结构与算法
文章平均质量分 78
温文艾尔
我是温文艾尔,2021年度优快云博客新星TOP6,Java领域新星创作者,大三在读,已入驻华为云,掘金开发者社区等
展开
-
【每日一题】——单调递增的数字
java每日一题-单调递增的数字原创 2022-03-05 17:07:36 · 884 阅读 · 10 评论 -
【每日一题】——合并区间
每日一题-合并区间-LeetCode精选例题原创 2022-03-03 12:12:42 · 671 阅读 · 18 评论 -
【每日一题】——跳跃游戏
每日一题-精选LeetCode例题-跳跃游戏原创 2022-02-28 09:08:12 · 3051 阅读 · 33 评论 -
【Java每日一题】——摆动序列
Java每日一题,精选LeetCode+详细题解原创 2022-02-26 17:56:41 · 669 阅读 · 22 评论 -
【Java每日一题】——递增子序列
java每日一题精选-递增子序列原创 2022-02-24 13:27:19 · 830 阅读 · 23 评论 -
【备战面试】Java每日一练(LeetCode热门例题)
算法题目练习,精选Leetcode热门题目原创 2022-02-23 13:52:56 · 2899 阅读 · 22 评论 -
【备战面试】算法每日一练
java语言每日一练,精选二叉树例题原创 2022-02-21 18:16:44 · 346 阅读 · 22 评论 -
【刷题那些事】Leetcode精选二叉树例题+解析
Leetcode精选例题,超详细解析,不容错过欧原创 2021-12-14 17:10:56 · 1059 阅读 · 47 评论 -
LeetCode刷题日记精选例题(代码+链接)
文章目录一、对称二叉树二、相同的树三、另一棵树的子树四、二叉树的最大深度五、二叉树的最小深度六、完全二叉树的节点个数七、平衡二叉树八、二叉树的所有路径相见即是有缘,如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ一、对称二叉树题目链接二叉树的对称是指二叉树的左子树与右子树互相翻转后是否相等,我们的第一种思路是使用队列,从最外侧向内侧进行扫描,判断每次扫描的两个节点的值是否相等节点为空的话会出现以下几种情况左节点为空,右节点不为空 返回false左节点不为空,右节点为空 返回f原创 2021-12-07 15:09:33 · 693 阅读 · 25 评论 -
11道精选经典LeetCode例题让你彻底搞懂二叉树的广度优先遍历
文章目录1.二叉树的层序遍历|2.二叉树的层序遍历||3.二叉树的右视图4.二叉树的层平均值5.n叉树的层数遍历6.在每个树行找最大值7.填充每个节点的下一个右侧节点指针8.填充每个节点的下一个右侧节点指针||9.二叉树的最大深度10.二叉树的最小深度11.翻转二叉树相见即是有缘,如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ广度优先搜索是遍历二叉树的一种基本方式,也就是层序遍历一个二叉树。从左到右一层一层的去遍历二叉树,对此我们需要借助数据结构队列来完成,因为队列先进先出的特点符合我们遍历原创 2021-12-04 16:59:39 · 2454 阅读 · 45 评论 -
LeetCode刷题日记精选例题(解析+代码+链接)
文章目录一、用栈模拟队列二、用队列模拟栈三、有效的括号解法一解法二四、删除字符串中所有相邻重复项五、逆波兰表达式求值六、滑动窗口最大值七、前k个高频元素一、用栈模拟队列因为队列先进先出,而栈先进后出,所以我们用两个栈,一个输入栈,一个输出栈来模拟队列,当添加数据时,将其加在输入栈,当输出数据时,输出输出栈的数据即可题目链接 Stack<Integer> inStack; Stack<Integer> outStack; public MyQueu原创 2021-11-30 11:17:54 · 814 阅读 · 13 评论 -
LeetCode刷题日记精选例题-双指针经典问题总结
文章目录一、移除数组元素二、反转字符串三、替换空格(剑指Offer)四、翻转字符串里的单词五、翻转链表六、删除链表的倒数第n个结点七、链表相交八、环形链表九、三数之和十、四数之和一、移除数组元素题目链接 public static int removeElement(int[] nums,int val){ int slowIndex; int fastIndex = 0; for (slowIndex = 0;fastIndex<num原创 2021-11-27 18:39:26 · 585 阅读 · 9 评论 -
LeetCode刷题日记精选例题(详细解析+代码+链接)
文章目录一、字符替换二、翻转字符串里的单词三、左旋转字符串(剑指Offer)四、实现strStr()五、重复的子字符串一、字符替换来源:leetcode题目链接创建StringBuilder对象(StringBuffer也可以),在遍历的时候进行判断,是空格则替换并加到StringBuilder后面,不是空格则直接加入 public static String replaceSpace(String s) { if (s==null){ retu原创 2021-11-27 18:29:20 · 1366 阅读 · 4 评论 -
LeetCode刷题日记精选例题(附代码+链接)
文章目录一、有效字母的异同词二、数组交集三、快乐数四、两数之和五、三数之和六、四数之和七、四数相加八、赎金信九、反转字符串十、反转字符串2一、有效字母的异同词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词来源:力扣(LeetCode)链接:题目链接解题思路:因为此题暴力破解的时间复杂度较高,所以我们采用下面的方式创建一个数组,记录每个字母出现的次数,对s中的每个字符进行原创 2021-11-25 16:19:05 · 1304 阅读 · 7 评论 -
LeetCode刷题日记精选例题(附代码+链接)
精选例题文章目录一、删除链表节点二、设计链表单链表实现双向链表实现三、反转链表四、两两交换链表中的节点五、删除链表的倒数第N个节点六、链表相交七、环形链表II题目解析一、删除链表节点给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点来源:力扣(LeetCode)题目链接 public ListNode removeElements(ListNode head, int val) { i原创 2021-11-21 17:35:37 · 676 阅读 · 4 评论 -
Leetcode刷题日记精选例题(附代码及链接)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、查找指定元素下标二、搜索插入位置三、在排序数组中查找第一个和最后一个元素四、移除元素双指针算法五、有序数组的平方六、长度最小的子数组滑动窗口算法七、螺旋矩阵(高频)一、查找指定元素下标给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。来源:力扣(LeetCode)题目链接提示:你可以假设nu原创 2021-11-20 18:27:32 · 676 阅读 · 6 评论 -
KMP算法解决字符串匹配问题(详细步骤图解)
KMP算法图解文章目录一、KMP算法步骤图解二、部分匹配值是怎么产生的代码一、KMP算法KMP是一个解决模式串在文本串中是否出现过,如果出现过,最早出现的位置的经典算法KMP算法常用于在一个文本串S中查找一个模式串P的出现位置,这个算法在1977年由Donald Knuth、Vaughan Pratt、James H.Morris三人发表KMP算法利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省去了大量的计算原创 2021-11-17 18:27:24 · 5222 阅读 · 3 评论 -
分治算法与汉诺塔问题的详解
本文利用分治算法来解决经典的汉诺塔问题文章目录一、分治算法分治算法的基本步骤二、分治算法处理汉诺塔问题1.汉诺塔思路分析一、分治算法分治算法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同的或类似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单地直接求解,原问题的解即子问题解的合并,这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)分治算法的基本步骤分治算法在每一层递归上都有三个步骤分解:将原问题分原创 2021-11-16 20:37:14 · 1354 阅读 · 5 评论 -
一文了解赫夫曼树的构建与赫夫曼编码
文章目录一、赫夫曼树基本介绍赫夫曼树几个重要概念和举例说明赫夫曼树创建步骤图解代码构建赫夫曼树二、赫夫曼编码1基本介绍通信领域中的信息的处理方式1-定长编码通信领域中的信息的处理方式2-变长编码通信领域中信息的处理方式3-赫夫曼编码将字符串通过赫夫曼进行压缩一、赫夫曼树基本介绍给定n个权值作为n个叶子结点,构造一颗二叉树。若该树的带权路径长度(wpl)达到最小,这样的二叉树为最优二叉树,也称为哈夫曼树(HuffmanTree)还有的书翻译为霍夫曼树赫夫曼树是带权路径长度最短的树,权值较大的节点离原创 2021-11-14 21:00:47 · 962 阅读 · 8 评论 -
堆排序算法(图解详细流程)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录堆排序基本介绍大顶堆举例说明小顶堆举例说明堆排序的基本思想堆排序步骤图解说明堆排序的基本思路总结堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏最好,平均时间复杂度均为O(nlogn),他也是不稳定排序堆是具有以下性质的完全二叉树,每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆,注意:没有要求节点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左原创 2021-11-14 10:53:58 · 40796 阅读 · 13 评论 -
斐波那契查找算法解析
文章目录前言一、斐波那契数列二、斐波那契查找算法前言学数据结构的时候被斐波那契查找算法困扰,刚开始难以理解,脑袋有点懵,翻看了许多大佬的博文,加上自己的理解发了出来一、斐波那契数列我们先看什么是斐波那契数列有这样一个数列:1,1,2,3,5,8,13,21…我们可以尝试找一下规律,并将后面的数字都按照这种规律在数列中呈现我们发现从第3个数字开始,每个数字等于前两个数字之和所以第n个数字f(n) = f(n-1)+f(n-2)符合这样规律的数列我们称之为斐波那契数列二、斐波那契查找算法原创 2021-11-12 18:21:23 · 2349 阅读 · 4 评论 -
基础排序算法总结(代码+图片分析)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、冒泡排序冒泡排序图解二、选择排序选择排序的基本思想选择排序图解插入排序插入排序的基本思想插入排序图解希尔排序希尔排序法基本思想希尔排序示意图交换法:移位法:快速排序快速排序介绍快速排序法示意图以中间值为基准以数组中第一位数字为基准归并排序归并排序图解基数排序基数排序基本思想基数排序的图文说明各算法时间复杂度统计图一、冒泡排序基本介绍:冒泡排序的基本思想就是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素原创 2021-11-11 18:58:29 · 1161 阅读 · 2 评论 -
八皇后问题的java解决方式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、八皇后问题二、代码一、八皇后问题8*8的棋盘中,每一行放置一个皇后,从第一行第一列开始放置皇后,每一个皇后不能存在于同一行同一列和同一斜线上,问有几种放置方法我们的解题思路为`1.现将皇后放置在第一行第一列2.如果符合规则,就利用递归,判断下一行皇后的位置3.一旦遇到不符合规则的位置则皇后向右移动一位4.最终一旦皇后在某一行找到一个合适位置且无法向下一行继续移动,就回溯到上一行并向右移动一位继续判断5.每在原创 2021-11-10 14:34:51 · 719 阅读 · 1 评论 -
逆波兰表达式介绍及求值实现
1. 初始化两个栈:运算符栈s1和存储中间结果的栈s22. 从左至右扫描中缀表达式3. 遇到操作数时,将其压s24. 遇到运算符时,比较其与s1栈顶运算符的优先级 1. 如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈 2. 否则,若优先级比栈顶运算符的高,也将运算符压入s1 3. 否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4.1)与s1中新的栈顶运算符相比较5. 遇到括号时: 1. 如果是左括号“(”,则直接压入s1 2. 如果是右括号“)”原创 2021-11-09 20:38:51 · 5345 阅读 · 2 评论 -
环形链表与约瑟夫问题的代码解决
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Josephu(约瑟夫)问题二、单项环形链表示意图1.环形链表2.约瑟夫问题思路前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、Josephu(约瑟夫)问题约瑟夫问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=原创 2021-11-09 10:04:40 · 1716 阅读 · 3 评论 -
单链表面试题总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、题目二、题解1.求单链表中有效节点的个数2.查找单链表中倒数第k个节点【新浪面试题】3.单链表的反转【腾讯面试题】4.从尾到头打印单链表5.合并两个有序的单链表,合并之后的链表依然有序全部代码一、题目单链表面试题如下:求单链表中有效节点的个数查找单链表中倒数第k个节点【新浪面试题】单链表的反转【腾讯面试题】从尾到头打印单链表【百度面试题:要求方式1:反向遍历。方式2:Stack栈】合并两个有序的单向链表示例原创 2021-11-08 14:44:16 · 547 阅读 · 1 评论 -
带头节点单向链表的增删改查
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、链表二、使用带head头的单向链表完成对数据的增删改查操作1.单链表的遍历模拟2.单链表的添加模拟3.单链表的修改模拟4.单链表的删除模拟一、链表链表是有序的列表,他在内存中的存储如下物理结构示意图‘链表是以节点的方式来存储,是链式存储每个节点包含data域,next域:指向下一个节点链表的各个节点不一定是连续存储链表分带头节点的链表和不带头结点的链表,根据实际需求来确定示例:pandas 是基于Num原创 2021-11-08 10:01:59 · 375 阅读 · 1 评论 -
单向队列与环形队列详解(图片+代码)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、队列介绍二、单向队列数组模拟队列1.单向队列模拟图单项队列代码模拟三、环形队列数组模拟队列环形队列代码模拟一、队列介绍队列是一个有序列表,可以用数组或是链表来实现遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入的要后取出。二、单向队列数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量因为队列的输出,输入是分别从前后端来处理,因原创 2021-11-06 15:47:38 · 696 阅读 · 1 评论 -
解析稀疏数组
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、稀疏数组二维数组转稀疏数组的思路稀疏数组转原始的二维数组的思路代码实现一、稀疏数组当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模二维数组转稀疏数组的思路遍历原始的二维数组,得到有效数据的个数sum根据sum就可以创建稀疏数组sparseA原创 2021-11-06 12:54:06 · 168 阅读 · 2 评论