自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain valu

可以看到select语句的提取没有问题,而insert语句对字段的提取出现问题。其他的看不透,暂时就默认为bug好了。出现问题时mapper.xml里的内容。

2023-10-22 00:16:50 1396

原创 MySQL内容及原理记录

事务:对数据的操作要么全部执行,要么全部不执行。如果执行没有成功,则会发生回滚,恢复到事务开始的时刻。

2023-08-30 20:32:24 429

原创 算法训练阶段总结

系统开启刷题的姿势,对数据结构有了基本的认识,但很多操作还不够熟练,保持练习。对题目有了一般性的思考,还不够敏感,需要积累,坚持刷题,希望秋招下来能刷300道(截止到20230828的刷题量,偶尔会参加周赛做个签到题)。

2023-08-28 12:28:56 1398

原创 算法修炼Day60|● 84.柱状图中最大的矩形

双指针思路,以当前数组为中心,借助两个数组存放当前数柱左右两侧小于当前数柱高度的索引,进行h*w的计算。注意首尾节点的左侧索引和右侧索引需要单独声名为0.单调栈,在原数组的基础上定义一个新的数组,对其进行首尾节点的扩容。空间复杂度:O(n).符合单调递减的情况时,全部入栈。时间复杂度:O(n).

2023-08-26 12:01:48 681

原创 算法训练Day59|● 503.下一个更大元素II ● 42. 接雨水

基本思路:找到当前索引下左右雨柱最大高度中较小的那个,减去当前位置高度,得到当前索引下可盛放雨水的容量,将大于0的结果进行加和即可。后面双指针定义两个数组也是延续这种思路,单调栈也是在这个基础上建立的。构建单调栈,栈中存放着数组元素对应的索引。单调栈通过取模操作在原数组的基础上实现循环遍历。时间复杂度:O(n).空间复杂度:O(n).时间复杂度:O(n).空间复杂度:O(n).

2023-08-25 12:12:59 143

原创 算法修炼Day58|● 739. 每日温度 ● 496.下一个更大元素 I

将数组1中的元素映射到map中,对数组2进行遍历构造单调栈,当前元素小于栈顶元素时,入栈即可。当前元素大于栈顶元素时进行判断栈顶元素是否存在map中,对其进行循环判断,如果存在则将当前元素加入到和数组1值相同的索引下的结果集中。自定义一个栈空间存储数组索引,将大于当前索引的数值时,计算索引差值,栈顶元素弹出,循环此步骤,直到:小于等于当前索引数值时,将当前索引加入栈中。时间复杂度:O(n^2).时间复杂度:O(n).空间复杂度:O(n).空间复杂度:O(n).

2023-08-24 12:11:23 218

原创 算法修炼Day57|647. 回文子串 ● 516.最长回文子序列

最长回文子序列,不一定连续。方格倒退一下可以获取遍历顺序为倒序,内部为正序。每个字符均为1,也即dp[i][i] = 1;动规解法:画图推导动规公式,当前状态由左侧和左下角推出,所以首层应该采用倒序的方式,内部采用正序的方式。空间复杂度:O(n^2).定义dp数组。时间复杂度:O(n^2).时间复杂度:O(n^2).空间复杂度:O(n^2).暴力思路见对应代码…

2023-08-23 15:50:48 342

原创 算法练习Day56|583. 两个字符串的删除操作 ● 72. 编辑距离

对于不同元素,添加和删除都是一步操作,替换是一步操作,动规状态转移方程的推导可以从左上、左侧、上侧来传递,对应的值要+1。求公共子串,将两字符串长度之和减去2倍的公共子串的长度。时间复杂度:O(n * m).空间复杂度:O(n * m).

2023-08-22 14:34:45 227

原创 算法练习Day55|● 392.判断子序列 ● 115.不同的子序列

暴力解法,循环遍历,当s和t字符串中字符相同时,对其当前位置与s的长度判断是否相同,如果相同返回true,否则更新遍历s字符串的位置,继续遍历。如果遍历结束没有返回true,则返回false。下s中拥有子串t的个数,便于初始化,当s不为null且t为null时,应该将。递推公式:当前遍历元素相同时,时间复杂度:O(m*n).时间复杂度:O(n).空间复杂度:O(1).空间复杂度:O(n).,其他部分默认为0.

2023-08-21 12:05:13 308

原创 算法练习Day53|1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

本题容易被交叉的线所迷惑,导致陷入什么时间应该选择那个数才能保证线的数量最大。卡哥一语道破本题的本质:最长公共子序列的值即为本体题解,解法同上。两个字符串最大相等字符序列的值可以以二维数组的形式展示出来,从左上角向右下角进行铺设,数值逐渐变大。一位数组推导即可,当前节点的连续子数组最大和为当前节点值和前一节点最大子数组+当前节点值的较大值。时间复杂度:O(n * m).时间复杂度:O(n * m).空间复杂度:O(n).空间复杂度:O(n).时间复杂度:O(n).空间复杂度:O(n).

2023-08-19 11:26:33 230

原创 算法修炼Day52|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

dp[i]的状态表示以nums[i]为结尾的最长递增子序列的个数。动规dp[i][j]定义很关键,当前状态需要前一个状态推导出来。后一个状态是由当前状态推出来的,注意边界值…dp[i]有很多个,选择其中最大的。时间复杂度:O(n^2).时间复杂度:O(n).空间复杂度:O(n).时间复杂度:O(n).空间复杂度:O(n).空间复杂度:O(n).

2023-08-18 12:13:24 566

原创 算法修炼Day51|● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

精确的定义状态是个难点,可以定义四种状态:持有股票(当天买入、前一天持有、前一天为保持卖出的状态)、卖出状态(前一天为冷冻期、前一天为卖出状态)、卖出股票(前一天持有股票当天卖出+prices[i])、冷冻期(前一天卖出的状态)初始化dp[i][j]数组,表示第i天的最大利润为dp[i][j].数组,确定两种状态:持有股票和不持有股票,进行状态转移推演即可。时间复杂度:O(n).空间复杂度:O(n).时间复杂度:O(n).空间复杂度:O(n).

2023-08-17 11:09:17 231

原创 算法练习Day50|● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

将两次买入卖出转化为是否持有的状态,当天可进行两次买卖,故每天买卖有四种状态,四种状态包含了当天不买不卖的状态。作为一个循环体进行i天,每天k次的循环遍历,最终输出结果即可。在上一题的基础上,将第i天。k). 空间复杂度:O(n。时间复杂度:O(n).空间复杂度:O(1).

2023-08-16 11:31:01 443

原创 算法练习Day49|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

第i天不持有,有两种情况:①第i-1天就不持有;②第i天卖出,说明第i-1天持有(包含了当天买入卖出)暴力解法、贪心也算比较符合思维,动规不容易想到,且状态处理不易处理。第i天持有,有两种情况:①第i-1天就持有;和上一题类似,每天股票有两种状态,持有或不持有。122.买卖股票的最佳时机II。121. 买卖股票的最佳时机。动规真香,可以一个套路解决多题。时间复杂度:O(n).空间复杂度:O(1).时间复杂度:O(n).空间复杂度:O(1).

2023-08-15 11:20:35 254

原创 算法练习Day48|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

分两种情况,选择根节点和不选根节点,分别计算两种情况的较大值,并选择两者之间的较大值存入map集合中,返回结果。考虑首元素和不考虑首元素,即可将环形进行拆解为两个线性数组,取两者之间的较大值即可。逆向思维,是否偷最后一个元素,倒序得出递推公式。边界思维,只有一个元素和两个元素的初始化考虑。前者不偷,后者偷,两者取较大值。空间复杂度:O(logn).时间复杂度:O(n).空间复杂度:O(1).时间复杂度:O(n).空间复杂度:O(1).时间复杂度:O(n).当元素数大于3个时,

2023-08-14 14:27:19 741

原创 算法练习Day46|139.单词拆分

将字典转换为HashSet,利用'.contains()'方法判断是否存在元素与背包中的子串相同,首位置相同则为true,其后位置的判断需要依据当前段是否匹配和前面子串为true的条件!字符串是否能被字符串列表中的元素拼接出来,显然是一个背包问题,而且需要排列。时间复杂度:O(n^2*m).空间复杂度:O(m).

2023-08-12 10:50:31 292

原创 算法练习Day44|70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

创建dp[]数组,dp[i]表示满足金额总和为i所需的最小硬币数量.初始化为Integer.MAX_VALUE,表示无最优解.背包遍历和物品遍历的前后关系,没有明确的顺序.①数值规律符合斐波那契数列,双指针可以解决。和零钱兑换思路几乎一样。

2023-08-11 12:02:17 380

原创 算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

声明初始化dp数组,求排列,先遍历背包后遍历物品。dp[]数组累加操作。求组合数,先遍历物品再遍历背包,dp[]数组累加即可。m). 空间复杂度:O(n。m). 空间复杂度:O(n。

2023-08-10 13:36:28 251

原创 算法训练Day42|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

01背包问题,dp[n + 1]初始化大小之所以是 n + 1 ,在于 n 是一个最大容量,且数组下标从 0 开始。遍历顺序:先遍历物品再遍历背包,后者背包倒序是为了将物品大值先放入背包,保证每个物品只能遍历一次。确定dp[i][j]数组的含义:[0,i]的物品任取放容量为j的背包里.遍历顺序依旧是:先物品再背包,保证物品先放入最大值及元素的唯一性.多重背包:有n种物品,每种物品个数各不相同.01背包:有n种物品,每种物品只有一个.完全背包:有n种物品,每种物品有无限个.空间复杂度:O(n).

2023-08-09 13:27:08 166

原创 算法训练Day41|416. 分割等和子集

好难啊,先放过自己,后面踩坑再填,鸵鸟策略

2023-08-08 11:39:57 328

原创 算法训练Day40|343. 整数拆分 ● 96.不同的二叉搜索树

看完题解,这种题更像是找规律。而且未必好找,似乎只能靠熟练度刷出思维方式.①确定dp[n]的含义:数n的二叉搜索树的个数为dp[n]⑤确定遍历顺序:从小数到大数顺序遍历.遍历顺序,从 3 开始,最值从。时间复杂度:O(n^2).时间复杂度:O(n^2).空间复杂度:O(n).空间复杂度:O(n).

2023-08-07 12:09:44 242

原创 算法训练Day39|62.不同路径 ● 63. 不同路径 II

条件排除,各种情况的考虑很关键,首尾节点和首行首列会影响初始化,当前节点影响dp[i][j]的值,初始化除点(0,0)第一行第一列均为1,递推公式推导。想象成矩阵填格子,两个关键点,初始化和递推公式。时间复杂度:O(m * n).空间复杂度:O(m * n).时间复杂度:O(m * n).空间复杂度:O(m * n).确定dp[][]数组,

2023-08-05 11:25:08 194

原创 算法训练Day38|● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

五部曲:确定dp数组及下标的含义;确定dp公式(根据规律来);举例子找规律,爬一层1,爬两层2,爬三层为3,爬四层为5,爬五层为8,用来确定递推公式。确定dp[i]的定义,第i步需要的花费中的最小值。dp[i]:爬到第i层楼梯,有dp[i]种方法。确定初始化,根据dp[i]的定义来。①确定dp[]数组以及下标的含义。确定递推数组,注意下标及边界!509. 斐波那契数。时间复杂度:O(n).空间复杂度:O(1).时间复杂度:O(n).空间复杂度:O(n).时间复杂度:O(n).空间复杂度:O(n).

2023-08-04 12:07:12 179

原创 算法训练Day37|738.单调递增的数字 ● 968.监控二叉树

很多情况导致难以下手,首先可以想遍历顺序,前?孩子节点大于根节点,选择后序可以尽可能少的放置一些摄像头。其次,放置摄像头的情况,①孩子节点的父节点放置摄像头,并作标记0,无覆盖;倒序遍历,将当前位置数字与之后数字进行比较,当大于后者,做--同时后者取9,当小于时继续遍历即可,最后将start + 1及之后位置的数值赋为9.方法将字符串中的字符按照整数的规则进行解析。如果字符串无法解析为一个合法的整数,数字转为字符串,再转为字符数组(String修饰的字符串不可变,不能直接修改)空间复杂度:O(n).

2023-08-03 11:48:17 128

原创 算法训练Day36|435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

创建一个26大小的数组来存放26个字母出现在s中的最大索引,遍历即可,字符串转换为字符数组(这一步可以省略,字符串遍历也一样)。抄完上面几个题目之后,这个思路挺清晰的:先排序,而后遍历合并重叠区间,非重叠区间直接加入结果集即可,注意最后一组元素是最后直接加入结果集!无序的数组表,去重复区间,首先进行排序,依据区间一侧进行判重处理,以右边界为届.时间复杂度:O(n + nlogn).时间复杂度:O(nlogn).空间复杂度:O(logn).时间复杂度:O(n).空间复杂度:O(1).空间复杂度:O(n)

2023-08-02 12:30:08 369

原创 算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

通过map做映射,记录5,10出现的次数,然后罗列5、10、20出现时对map中元素数量的影响,排除所有不符合条件的,最后符合条件的返回true.先判断身高,从高到低排列,对于相同身高按照k值从低到高排列。对齐左边界,更新右边界,思路清晰,方法调用较弱。时间复杂度:O(logn).方法不熟悉,调用还挺难的…时间复杂度:O(n^2).时间复杂度:O(n).空间复杂度:O(1).空间复杂度:O(n).空间复杂度:O(1).

2023-08-01 12:09:04 145

原创 算法训练Day34|1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

②贪心法:一层for循环,一个特殊节点,当前油量和<0时,index+1,也即从下一节点开始才有可能,总剩余油量为totalSum,决定了是否可以走完一圈。整体按照元素绝对值的大小进行排序,保证最大非负数先被赋予正值以保证整体和的最大值,之后遍历赋值,最后给最后的k进行尾部赋值。前后分别双向遍历,首次遍历赋值,找出右>左,二次遍历找出左>右并选最大值。时间复杂度:O(nlogn).空间复杂度:O(1).时间复杂度:O(n).空间复杂度:O(n).时间复杂度:O(n)空间复杂度:O(1)

2023-07-31 12:35:19 98

原创 算法训练Day32|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

顺序遍历,只能局限于当前索引下元素值范围内,并保存最大值,只要i+nums[i] >= nums.length - 1 ,即可返回。当天买卖利润为0,所以索引直接从1开始即可,隔天利润与0取最大值,一直循环加和输出即可。需要清晰需要几个变量,计数器,当前索引下的最大覆盖范围.特殊情况:只有一个元素直接返回true.时间复杂度:最大为O(n).时间复杂度:O(n).空间复杂度:O(1).时间复杂度:O(n).空间复杂度:O(1).空间复杂度:O(1)

2023-07-29 12:10:00 124

原创 算法训练Day31|理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

时间复杂度:O(nlogn).数组排序的时间复杂度为O(nlogn),遍历数组的时间复杂度为O(n).①双层for循环暴力解法,遇到符合条件的用break终止本层for循环,返回计数器结果即可.题目示例都是有序的,不排序也能实现,但没有明确说明是有序的,提前拍个序比较稳妥.空间复杂度:O(n).创建count数值?贪心:局部最优,推出整体最优。// 时间复杂度:O(n^2)// 空间复杂度:O(1)时间复杂度:O(n).空间复杂度:O(1).时间复杂度:O(n).空间复杂度:O(1).

2023-07-28 12:16:23 179

原创 算法训练Day30|● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独

组合问题:for循环横向遍历,递归实现纵向遍历分割问题排列问题解数独、N皇后问题真难,先这样~

2023-07-27 16:30:26 100

原创 算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II

时间复杂度:一个元素在回溯一层同时进行for循环和调用递归函数时间耗费为2倍,n层位2^n;n个元素则复杂度为O(n*2^n).空间复杂度:栈堆空间开销,递归函数消耗栈,层数最大为N,此时时间复杂度为O(n).堆空间开销为集合O(n)。HashSet临时集合存储所有遍历过的元素,调用hs.contains()方法用于同一递归深度的树层去重!时间复杂度:一次遍历为n,n次遍历为n^2.为什么代码随想录给的是O(n!空间复杂度:栈开销O(n).堆开销为O(n).2^n).有疑问:代码随想录O(n!

2023-07-26 13:49:39 141

原创 算法训练Day28|● 93.复原IP地址 ● 78.子集 ● 90.子集II

使用逗点分割字符,对每段字符进行范围,内容的有效性进行检验,当逗点数量为3时,字符被分割成四段,以此作为终止条件。将数组抽象成树形结构,先排序,定义一个used数组进行标记数层去重,for循环横向遍历,backtracking()递归遍历,当位置超过数组长度就是终止条件.时间复杂度:一次遍历经历一个for循环和一个递归,一个元素要经历n次遍历,则为2^n.而n个元素需要n*2^n.时间复杂度:每一段数字最大为3,每次最多递归四次,O(S*3^4).空间复杂度:取决于栈空间和堆空间的开销,O(n + m)

2023-07-25 12:00:36 144

原创 算法训练Day27|39. 组合总和● 40.组合总和II● 131.分割回文串

确定单层递归的逻辑backtracking(),传入结果集List> res, List path, int[] candidates, int target, int sum, int idx(防止递归调用重复的数字)确定递归函数,剪枝操作(sum>target/树层去重),for循环遍历,添加,加和,标记,递归,最后回溯。空间复杂度:O(n^2).每次for循环调用一个回溯函数一个回文子串函数.n个元素则调用n^2层的深度。组合问题,元素有重复,但结果不允许重复,则需要考虑枝干层元素的去重。

2023-07-24 20:14:40 104

原创 算法训练Day25|216.组合总和III● 17.电话号码的字母组合

递归法进行广度和深度遍历,深度遍历k层,广度遍历受限于9的数值。map映射映或者二维数组均可以存储相应的元素,回溯函数传入需要的参数:digits/numString/num对其进行递归即可.时间复杂度:O(n*n^2).一次递归查值(深度)对应k次递归和k次for循环,则时间消耗为n^2,n次遍历(广度)则需要n.空间复杂度:O(k).空间复杂度取决于栈和堆空间的消耗,栈时是递归函数调用的层数k,数组则为O(k).空间复杂度:O(k+m).k为递归函数的深度或层数,k为字符数组的大小.

2023-07-22 13:44:46 171

原创 算法训练Day24|理论基础 ● 77. 组合

回溯法,也称回溯搜索法。是一种搜索方式。递归和回溯是同时存在,递归进入对应回溯返回。

2023-07-21 12:11:15 104

原创 算法训练Day23|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树

位于区间两侧的往区间内靠拢,也即小于low时,向右遍历并返回节点,大于high时,向左遍历并返回节点。空间复杂度:调用函数消耗的空间为栈空间的消耗,因此空间消耗取决于递归函数的调用层数或者深度。空间复杂度:O(n).调用递归函数的深度即为栈的开销,最坏的情况是当二叉搜索树为链表。时间复杂度:时间消耗取决于递归函数的调用次数,而调用递归函数的次数为O(n).空间复杂度:取决于栈的开销,栈的开销取决于递归函数的调用深度,O(n/2).时间复杂度:O(n).至多遍历整棵树,量级为O(n).时间复杂度:O(n).

2023-07-20 12:18:14 68

原创 算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

是否有相等值,没有直接返回null,有则进行递归遍历判断,再判断该节点是否有左右子树的情况,当左右子树均不为空时,将该节点的左子树挂到右子树的左子节点上。利用二叉搜索树的特性,当root.val介于p.val和q.val时,即可返回root节点。空间复杂度:O(n).做坏的情况时链表,递归深度为n层递归函数,栈的空间消耗也为O(n).空间复杂度:O(n).最坏情况下是链表,则调用n层递归函数,栈的开销也一致。时间复杂度:O(n).最坏情况下为链表。时间复杂度:O(n).空间复杂度:O(1)

2023-07-19 23:56:56 98

原创 算法训练Day21|530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

暴力解法:遍历整棵树(顺序不重要),用map记录出现的次数,节点值当作key,出现的次数记作value,value进行累加即可。递归+双指针法:中序遍历,重点在于处理中节点的值。用计数器进行记录,获取计数器最大值即为众数,众数可能为多个,相等时将节点加入即可。.二叉树最坏情况为一条链表,会达到O(n)级别.普通情况下是O(logn)级别,logn代表递归函数在n个节点时调用的次数.时间复杂度:O(n).取决于节点的数量级n.时间复杂度:O(n).最大调用所有节点.空间复杂度:O(n).最大坏情况为链表.

2023-07-18 12:12:09 72

原创 算法训练营Day20| ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树

时间复杂度:二叉树遍历最坏情况是单链表的二叉树,此时递归函数调用了n次,则为O(n).均值的普通二叉树为O(log(n)).空间复杂度:递归调用n次,而最坏情况二叉树为链表,则栈空间开销为O(n).正常为O(logn).时间复杂度:数组for()循环遍历历时O(n),递归调用为O(n).两者嵌套为O(n²).空间复杂度:递归函数调用n次,也即栈使用n次,则复杂度为O(n).空间复杂度:调用n次函数,则栈空间开销为O(min(m,n)).递归函数传入两个树的根节点;时间复杂度:递归调用n次,则为O(n).

2023-07-17 12:16:31 117

原创 算法训练Day18|● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

空间复杂度:O(n).消耗的是栈空间,最坏情况下,二叉树为单向链表,此时复杂度为O(n),正常情况下,为普通二叉树,此时复杂度为O(longn).根据中序和后序的特点,以后序的最后一个节点是根节点,分别对中序和后序进行切割,得出对应的数组区间,该方式递归进行,直到后序的。确定单层递归逻辑:前序即可,root[add()]——左[add()]——右[add()],每每遍历到叶子节点需要回溯.空间复杂度:O(n).空间复杂度的大小取决于栈空间的消耗,最坏情况下为,链表情况。时间复杂度:递归n次,时间复杂度。

2023-07-15 14:10:23 157

空空如也

空空如也

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

TA关注的人

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