自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 问题收藏夹——使用mybatisPlusJoin报 NoSuchPropertyException错误

MPJLambdaQueryWrapper 类有问题,应该用MPJLambdaWrapper,去看了作者官网,发现已经没有这个类的用法了,但是还能用这个类······(Copilot直接给我补全这个类😅)

2023-06-29 10:40:47 269

原创 每日算法总结——回溯算法练习:LeetCode90 子集||

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按。

2023-06-17 23:34:27 128

原创 Java JIT(Just In Time)即时编译

入口:如何通俗易懂地介绍「即时编译」(JIT),它的优点和缺点是什么?

2023-06-16 09:45:23 138

原创 每日算法总结——回溯算法、 LeetCode 131. 分割回文串

回溯算法真的是解决排列问题的一大利器,其实很多时候自己不经意间就写出了回溯算法,但是一直没有一个系统的认识,今天做一个详细的总结。概念回溯法(back tracking)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回到上一步,重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点回溯法和穷举法很像,不如说回溯法是穷举法的一个改进,它在所有可行的选择中,系统地搜索问题的解。

2023-06-12 22:36:39 735

原创 山东大学软件学院2023服务开发技术期末考试(回忆版)

总的来说,题目中规中矩,有往年题也有新题,有记忆题也有理解题,建议复习的时候把PPT仔细看一遍(这里就不得不吹了,刘老师的PPT是真的详细,仔细看能学到很多东西,不像某些课程(说的就是你,增强现实😤)),注意把前几章的概念记一下。

2023-06-06 10:31:40 129 1

原创 ROA、SOA、RPC与RPC区别与联系

理解可能不到位,有问题请指出。REST 风格的服务。

2023-05-31 22:09:09 635

原创 每日算法练习——LeetCode 347、222

先遍历一次整个数组,使用哈希表记录每个数的出现次数,然后将这些数据对放入大根堆中(按出现次数排序),最后从大根堆中取前k个最大的元素返回。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。:解二叉树题目,首先想到的就是能不能用递归写,但这道题我第一眼看的时候,觉得递归写不出来,原因是我的思想。最坏情况下,每次取的中枢数组的元素都位于数组的两端,时间复杂度退化为。我们可以使用基于快速排序的方法,求出「出现次数数组」的前。

2023-04-22 21:53:01 89 2

原创 每日算法总结——有序表系列——详解跳表(Java)

跳表的详解与代码实现

2023-04-16 11:12:27 87

原创 每日算法总结——有序表系列——SBT与红黑树简介(Java)

这其实是有问题的,因为可能L的节点都落在了A上,R的节点都落在了C上。这同样是不平衡的,但这种情况除非我们继续往下递归,否则很难识别。SBT 本质上是一棵二叉搜索树,即对于每一个节点都有:以它右孩子构成的右子树中的所有元素大于它,左孩子为根构成的左子树所有元素都小于它。由于我们使用递归来维护树的平衡性的时候,是从底往上的。观察一下上面的图,我们想知道T这棵树是否平衡,为什么不判断。,它可以将一棵不平衡的子树旋转到平衡状态,什么时候调用。可以看到,在旋转过程中,节点。,这样可以简化我们的分析。

2023-04-16 11:01:27 124

原创 每日算法总结——有序表系列——详解 AVL 树(Java)

所谓 LL 型就是上图左边那种情况,即因为在根节点的左孩子的左子树添加了新节点,导致树的高度差变为 +2,二叉树失去平衡。为了保证二叉树的平衡, AVL 树引入了所谓监督机制,就是在树的某一部分的不平衡度超过一个阈值后触发相应的平衡操作。LR 就是将新的节点插入到了 n 的左孩子的右子树上导致的不平衡的情况。RL 就是将新的节点插入到了 n 的右孩子的左子树上导致的不平衡的情况。也很简单,我们可以根据破坏树的平衡性(子树高度差的绝对值大于 1)的节点以及其子节点的平衡因子来判断平衡化类型。

2023-04-15 22:21:34 112

原创 每日算法总结——动态规划练习:预测赢家、象棋马走日、零钱兑换、动态规划总结

首先,需要找到一个尝试的版本,即暴力递归的版本尝试的方式可以是从左往右(从右往左)尝试范围尝试等等(这两个是比较常见的尝试模型,基本可以搞定七成以上的题目)暴力递归转记忆化搜索这个过程比较容易,就是分析递归函数有几个变量,然后决定用几维数组来存储搜索结果记忆化搜索转严格表结构动态规划首先,考虑 Base case 的情况,把能直接得到值的位置先填到表格里分析递归过程,搞清楚表格之间的依赖关系,从而确定表格的填写顺序优化填写过程遍历表格是必须的,无法优化;

2023-04-12 19:13:00 147

原创 每日算法总结——如何将暴力递归转为严格表结构动态规划

下面以一道题目为例,演示如何将暴力递归优化成动态规划。:给定n个位置:1~n,有一个机器人,当前处于cur位置,它想要去end位置,但是必须要走k步,问有多少种行走方法?

2023-04-09 11:29:47 60

原创 每日算法总结——位运算经典题目

如果给定a、b执行加减乘除的运算结果就会导致数据的溢出,那么你实现的函数不必对此负责,除此之外请保证计算过程不发生溢出。的结果,所以又回到了两数相加的情况,就这样一直循环,直到进位信息为0,表示不需要进位了,此时返回异或后的结果即可。:有点类似计组里面的原码一位乘,假设a为被乘数,b为乘数,我们可以看成是b个a相加,但是是按照我们平常。:给定两个有符号32位整数a和b,不能使用算术运算符,分别实现a和b的加、减、乘、除运算。的方法,假设a是被除数,b是除数,则我们首先需要进行一个。如何判断一个数是2的幂。

2023-04-07 21:01:58 324

原创 每日算法总结——大数据问题的解题技巧、题目练习

现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现过的数。可以使用最多1GB的内存,怎么找到所有未出现过的数?:32位无符号整数的范围是0~4294967295,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数。的思想,把这包含40亿个无符号整数的大文件分成多个小文件,在每个小文件中查找出现了两次的数,然后整合。:有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。1~4的问题之前已经介绍过了,下面介绍剩下的。

2023-04-04 20:00:03 139

原创 每日算法总结——二叉树的Morris遍历

一种遍历二叉树的方式, 并且时间复杂度ON额外空间复杂度O1,通过利用原树中大量空闲指针的方式,达到节省空间的目的Morris遍历细节假设来到当前节点cur,开始时cur来到头节点位置curcurcurmostRightmostRightcurcurmostRightcurnullcurcur通常的二叉树遍历是通过栈来完成的,也就是栈记录了之前节点的位置,方便遍历完下面的节点后返回,这种方式是需要占用大量的系统空间的。而看到遍历过程可知,它是利用了底层树的指向。

2023-04-02 15:31:51 97

原创 每日算法总结——树型DP套路

整个公司的人员结构可以看作是一棵标准的、没有环的多叉树。树的头节点是公司唯一的老板。除老板之外的每个员工都有唯一的直接上级。叶节点是没有任何下属的基层员工(subordinates列表为空),除基层员工外,每个员工都有一个或多个直接下级。从二叉树的节点a出发,可以向上或者向下走,但沿途的节点只能经过一次, 到达节点b时路径上的节点个数叫作a到b的距离,那么二叉树任何两个节点之间都有距离,求整棵树上的最大距离。给定一棵多叉树的头节点boss,请返回派对的最大快乐值。叉树节点间的最大距离问题。

2023-04-01 17:17:25 263

原创 每日算法总结——单调栈

如果对每一个数都想求这样的信息,能不能整体代价达到$O(N) $?需要使用到单调栈结构。,假如对于数组的数,我们要求的是左边和右边比这个数大、且离这个数最近的位置。在数组中想找到一个数,左边和右边比这个数大/小、且离这个数最近的位置。:每个元素只进栈一次、出栈一次,所以时间复杂度为。上面说的是数组无重复值的情况,那是否可以解决。

2023-03-31 20:44:37 86

原创 每日算法总结——滑动窗口最大/最小值求解

的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。要理解双端队列维持的是什么信息,为什么可以保持最大值?表示每一种窗口状态下的以本题为例,结果应该返回。为什么一个新的元素进入窗口,如果大于当前最小值。上述题目中的滑动窗口是固定大小的,那如果。对于滑动窗口,我们使用两个指针。由用户决定,比如用户可以让。,什么是单调双端队列?维持的信息是:如果只让。右移,谁会成为最大值。

2023-03-30 19:45:00 283

原创 每日算法总结——Manacher算法详解、LeetCode459.重复的子字符串

错位移动的距离就是整个重复子串的长度,移动之后,通过判断重叠部分是否相同来判断是否是满足题意的字符串。:字符串str中,最长回文子串的长度如何求解?所以我们可以先破坏,前后两个S的完整性,即去掉。如何判断重复子串,即错位移动的距离?的最大回文区域的半径了,直接取。为中心的最大回文区域恰好没超过。的最大回文区域的右边界至少为。为中心的最大回文区域越过了。的最大回文区域不能更大呢?:遍历str中的字符,以。为中心的最大回文区域也在。的最大回文区域中,一定有。的最大回文区域不可能超过。的最大回文区域就是下图的。

2023-03-29 10:33:42 88

原创 每日算法总结——力扣15.三数之和、力扣18.四数之和、引出n数之和

看到题目的第一思路就是,三重for循环从头到尾遍历所有可能的三元组组合,但是不能包含重复的三元组,而且这三元组指的不是下标的三元组,而是。这道题是比三数之和要复杂一点的,首先它的目标值由外界提供,不再是统一为0了,而且是四个树的组合,去重和剪枝操作相对较难。整体思路是和三数之和一样,也是使用双指针,基本解法就是在三数之和的基础上。就返回了,因为 0 已经是确定的数了,四数之和这道题目。那么一样的道理,五数之和、六数之和等等都采用这种解法。的情况,三数之和的时间复杂度是。,四数之和的时间复杂度是。

2023-03-28 09:28:43 96

原创 每日算法总结——KMP算法详解(包含Java实现)

字符串str1和str2,str1 是否包含str2,如果包含返回str2在str1中开始的位置。如何做到时间复杂度ON完成?经典字符串匹配问题:遍历str1中的每个字符,判断以该字符为首字符时,能否与str2匹配,时间复杂度为ON∗M不难发现经典解法的实质就是,如果i位置为首的字符串不匹配,就往回跳到i+1从头开始判断,仔细看整个过程可以知道,每次回跳,都会重复判断很多字符,那是否可以将这些信息收集利用起来,使得每次不用回跳这么多?KMP算法就是这样的,它甚至不用回跳。

2023-03-26 20:42:09 360

原创 每日算法总结——一致性哈希、并查集、岛屿数量问题

一致性哈希、并查集、岛屿数量问题

2023-03-25 16:35:19 126

原创 每日算法总结——暴力递归解背包问题、哈希函数、哈希表的实现、布隆过滤器

暴力递归解背包问题、哈希函数、哈希表的实现、布隆过滤器

2023-03-24 10:48:13 93

原创 每日算法总结——打印一个字符串的全部排列、预测赢家、逆序栈、字符串转化

打印一个字符串的全部排列、预测赢家、逆序栈、字符串转化

2023-03-22 14:56:41 84

原创 记录在山大软院的第一次CSP认证(白给)考试

做往年题的时候就觉得自己的算法能力可能做不出第二题,结果真就没做出来,算最小锄地时间,我是用优先队列取最大值的,但是最终超时,我舍友的思路是用哈希表合并的方法,感觉挺靠谱,显然我的思维都被 “最大” 两字限制住了,最后只拿70分。地点是在软件园校区实验楼303,书包可以放外面,可以带书进考场(我带了本《数据结构、算法与应用》,全程没翻过 _(:3」∠)_),两个人坐一桌,不过我隔壁的兄弟好像是写C++的,考场老师也比较好,电脑开不开机,立马让我换一台;没到250,还是挺可惜的吧。

2023-03-20 11:02:27 215

原创 每日算法总结——暴力递归尝试、汉诺塔问题、字符串子序列打印问题

暴力递归尝试、汉诺塔问题、字符串子序列打印问题

2023-03-20 10:33:13 57

原创 每日算法总结——N皇后问题普通解法+位运算加速

N皇后问题普通解法+位运算加速

2023-03-18 11:02:18 97

原创 每日算法总结——堆扩展:数据流的中位数、贪心算法题目:金条切割问题、利润最大化问题

堆扩展:数据流的中位数、贪心算法题目:金条切割问题、利润最大化问题

2023-03-17 14:05:47 100

原创 每日算法总结——前缀树、对数器的补充、贪心算法题目:最多可以参加的会议数量、最小字典序

前缀树、对数器的补充、贪心算法题目:最多可以参加的会议数量、最小字典序

2023-03-16 15:50:17 78

原创 每日算法总结——拓扑排序算法、求最小生成树算法(Kruskal、Prim)、单源最短路径算法(Dijkstra)

拓扑排序算法、求最小生成树算法(Kruskal、Prim)、单源最短路径算法(Dijkstra)

2023-03-11 10:35:02 114

原创 每日算法总结——图的表示、图的宽度优先遍历BFS、图的深度优先遍历DFS

一般情况下,Node的编号就是Node的值,且编号范围固定,比如1000个城市之间的连通情况,此时HashMap可以用。,比如邻接表法、邻接矩阵等等。这就导致对于每一种图的表示方法,都要写出该表示方法对应的一套算法。包含从该点出发所指向的下一个点、以该点为起始点的有向边、该点的入度和出度。同时,这也是面试场合经常出现的情况,对于一种不熟悉的图表示方法,往往。整个过程中栈中节点的顺序就是深度优先遍历的顺序。对于这种情况,大佬给出的建议是。包含边的起始点、终止点、权重。包含所有的点集和所有的边集。

2023-03-10 10:19:56 100

原创 每日算法总结——寻找二叉树最低公共祖先、在二叉树中找到一个节点的后继节点、二叉树的序列化和反序列化,折纸问题

以。

2023-03-09 19:14:52 283

原创 每日算法总结——二叉树的判断:二叉搜索树的判断、完全二叉树的判断、满二叉树的判断、平衡二叉树的判断

套路(递归)思想:如果一个问题,可以通过向左孩子、右孩子要信息来解决本树的问题,则一般可以递归化。具体步骤如下:判断子树需要返回那些信息(即每次递归返回的信息)。根据子树提供的信息,计算出当前整棵树需要返回的信息。将计算出的信息返回给父节点。任何二叉树相关的树型DP问题均可以使用该递归套路解决,比如上面所说的四个问题,其中判断满二叉树和判断平衡二叉树的方法就是用这种递归套路解的,而且判断二叉搜索树问题也是可以用这种套路解题。

2023-03-08 10:36:19 384

原创 每日算法总结——二叉树的打印、二叉树的宽度优先遍历、求二叉树最大宽度

运用队列,初始时将头节点压入队列;之后每弹出并处理一个节点,就把它的左孩子、右孩子依次压入队列中。打印函数网上右很多,这里这记录一种,目的是用来调试。,即依次输出第一层、第二层、…一棵树的最大宽度是指。

2023-03-07 15:38:01 266

原创 每日算法总结——判断链表是否有环、链表相交问题、二叉树递归/非递归遍历

递归方式本质上是系统帮我们维护一个栈,并针对我们的递归操作进行弹栈/压栈处理;,所以可以把打印操作换成压栈操作,即再准备一个收集栈,用于调转打印顺序。二叉树遍历属于必须要熟练掌握的内容,其中非递归遍历可能会在面试场合出现。,可以将对左右孩子的处理顺序调换,这样打印的顺序是。子树(如果有的话)重复上述左边界进栈,直到栈为空。如果存在环的话,快指针与慢指针一定会在环上相遇。递归遍历方法不难,代码也很好写,三者的区别在于。,然后将栈顶节点弹出打印,并将弹出节点的。的顺序依次压入栈(如果有的话)

2023-03-06 17:13:14 128

原创 每日算法总结——链表大于/小于/等于划分、含有随机节点链表的复制

实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null。给定一个由Node节点类型组成的无环单链表的头节点head,请实现一个函数完成这个链表的复制,并返回复制的新链表的头节点。),然后由克隆出来的节点串上老链表节点的下一个,遍历对应节点进行rand的拷贝,最后在next方向上把新老链表分离出来。,额外空间复杂度请达到。

2023-03-04 21:18:05 106

原创 每日算法总结——排序算法总结、哈希表与有序表、回文链表判断

同样值的个体之间,如果不因为排序而改变相对次序,就是这个排序是有稳定性的;否则就没有。不具备稳定性的排序:选择排序、快速排序、堆排序具备稳定性的排序:冒泡排序、插入排序、归并排序、一切桶排序思想下的排序哈希表在使用层面上可以理解为一种集合结构如果只有key,没有伴随数据value,可以使用HashSet结构 (C++中叫UnOrderedSet)如果既有key,又有伴随数据value,可以使用HashMap结构 (C++中叫Un0r der edMap)有无伴随数据。

2023-03-03 10:19:21 82

原创 每日算法总结——java TreeSet、数组旋转、堆排序扩展、桶排序思想下的排序

也就是数组长度为k的倍数,这个会原地打转,对于这个问题我们可以使用一个数组visited表示这个元素有没有被访问过,如果被访问过就从他的下一个开始,防止原地打转。,准备一个小根堆,遍历前7个数字放入小根堆,此时小根堆的最小值一定是整个数组的最小值(因为任何一个数的位置与它排完序的位置距离都不会超过。最近在写LeetCode的时候,遇到了很多数组旋转的问题,因此决定在这里做个总结,可能不全,后续再补充。当然也可以再调整下,先反转前面的,接着反转后面的k个,最后在反转全部,原理都一样。相对于数组来说比较小。

2023-03-02 16:52:31 208

原创 每日算法总结——快速排序、堆排序

(代号A)移动到根元素的位置,此时A一定小于其某个子节点,因此需要执行heapify向下移动插入。

2023-03-01 11:58:05 71

原创 每日算法总结——二分查找扩展、递归复杂度分析、归并排序

在练习二分查找的题目时,自己最容易忽视的就是边界问题,大多数算法题都应该首先考虑特殊值处理,比如。

2023-02-28 10:34:48 114

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除