自定义博客皮肤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)
  • 收藏
  • 关注

原创 mybatis的xml中,where标签不自动删除多余的and之类的问题

原来是注释导致的问题。我在idea使用的一键注释/* */,可能mybatis误以为这是一个内容,然后就觉得这个内容后面需要一个and来连接下面的sql语句,所以就不删除。遇到了这个莫名其妙的问题,起初是很疑惑的,where标签好像失灵了一般不会自动删除掉 多余的and。也就是说条件前面不能出现/* */这样的注释。看了眼sql语句,发现还是有and没被删除。哈哈,有时候碰到一些奇怪的事情真的有点难绷。后来重新写了遍后发现又没事了。然后就研究了好一会,发现!把注释挪开就没事了!

2024-07-16 08:52:14 338

原创 maven的settings.xml无法正确配置本地仓库路径

我很是震惊,明明之前一直都是这样子配置的。当我冥思苦想,在网上搜寻资料无果时,我翻了一下settings.xml文件,突然发现mirror这边搞错了。哈哈,这下真的是眼瞎导致的了,真的难绷,一个不小心就浪费了一个小时来解决。在配置新的本地仓库路径的时候突然发现居然idea居然识别不了我settings.xml里面配置的路径。因为以前使用过新版的maven,现在要换个版本使用。

2024-07-13 11:19:54 431

原创 代码随想录算法训练营总结

算下来这短时间收获颇丰,学到了许多的算法。一开始是很上心的去刷题的,在假期期间学到了很多。但是到后来的上课之后,发现日常变得忙碌之后,就没耐心去细看一个题了,导致后面做的有点敷衍。总的来说一刷代码随想录让我初步了解了各种的算法,还是有所脾益的。

2024-03-29 22:08:14 159

原创 代码随想录算法训练营第六十天 | 力扣 单调栈84.柱状图中最大的矩形

【代码】代码随想录算法训练营第六十天 | 力扣 单调栈84.柱状图中最大的矩形。

2024-03-29 21:57:44 286 2

原创 代码随想录算法训练营第五十九天 | 力扣 单调栈503. 下一个更大元素 II

【代码】代码随想录算法训练营第五十八天 | 力扣 单调栈503. 下一个更大元素 II。

2024-03-27 16:02:03 264

原创 代码随想录算法训练营第五十八天 | 力扣 单调栈739.每日温度

【代码】代码随想录算法训练营第五十八天 | 力扣 单调栈739.每日温度。

2024-03-27 15:55:39 187 1

原创 代码随想录算法训练营第五十七天 | 力扣 647. 回文子串

【代码】代码随想录算法训练营第五十六天 | 力扣 647. 回文子串。

2024-03-26 00:55:37 179

原创 代码随想录算法训练营第五十五天 | 力扣 72. 编辑距离

【代码】代码随想录算法训练营第五十四天 | 力扣 392. 判断子序列。

2024-03-24 23:45:56 144

原创 代码随想录算法训练营第五十四天 | 力扣 392. 判断子序列

【代码】代码随想录算法训练营第五十四天 | 力扣 392. 判断子序列。

2024-03-23 19:18:21 225 1

原创 代码随想录算法训练营第五十三天 | 力扣 1143. 最长公共子序列

【代码】代码随想录算法训练营第五十三天 | 力扣 1143. 最长公共子序列。

2024-03-21 23:28:11 251

原创 代码随想录算法训练营第五十二天 | 力扣 300. 最长递增子序列

上课确实没时间干这个,课前预习和后作业。

2024-03-21 00:36:11 222

原创 代码随想录算法训练营第五十一天 | 力扣 309. 买卖股票的最佳时机含冷冻期,714. 买卖股票的最佳时机含手续费

【代码】代码随想录算法训练营第五十一天 | 力扣 309. 买卖股票的最佳时机含冷冻期。

2024-03-19 19:03:30 145

原创 代码随想录算法训练营第五十天 | 123. 买卖股票的最佳时机 III

【代码】代码随想录算法训练营第五十天 | 123. 买卖股票的最佳时机 III。

2024-03-18 19:09:23 415

原创 代码随想录算法训练营第四十八天 | 121. 买卖股票的最佳时机

好忙这几天,偷个懒小做一点,后面有空补回来。贪心了,想不出怎么dp。

2024-03-17 03:13:34 357

原创 代码随想录算法训练营第四十七天 | 198. 打家劫舍

如果这一家加上上一家能比隔壁家要多,那么不偷隔壁家。如果是隔壁家的,就不偷,大价值隔壁家来算。今天好多事情要做,偷懒了。

2024-03-16 01:28:52 405

原创 代码随想录算法训练营第四十六天 | 卡码网 56. 携带矿石资源,LeetCode 139.单词拆分

多重背包,即每个物品都有不只一个,思路和01背包一样。我们只需要把物品展开就行。

2024-03-14 20:20:36 337

原创 代码随想录算法训练营第四十五天 | 卡码网 70. 爬楼梯 (进阶) ,LeetCode 322. 零钱兑换 , 279.完全平方数

经典的完全背包,用套路和滚动数组就可以解决,要记得,求排列就外层物品内层背包;本题求组合,那么就外层背包内层物品。dp数组的大小为n+1,则dp【n】表示,n的完全平方数的最小数量。把初始值设为int的最大,目的是在后面用min来去掉这个最大值。然后要判断是否是初值,如果是初值的话那就在后面的操作里面越界了。把dp[0]设为0方便amount为0的情况。这里物品是完全平方数, 背包大小为n。dp数组含义是完全平方数的最少数量。

2024-03-13 20:21:34 415

原创 代码随想录算法训练营第四十四天 | 卡码网52. 携带研究材料 ,LeetCode 518. 零钱兑换 II , 377. 组合总和 Ⅳ

如果把遍历nums(物品)放在外循环,遍历target的作为内循环的话,举一个例子:计算dp[4]的时候,结果集只有 {1,3} 这样的集合,不会有{3,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!和01背包差不多,滚动数组01背包是第一层从前到后,第二层循环从后到前。这个完全背包两个循环都是从前到后。跟之前做的一道题有点相似,也是累加的,区别是01背包和完全背包。这题对哪个循环在外层还是很有讲究的。

2024-03-12 19:01:45 374

原创 代码随想录算法训练营第四十三天 | LeetCode 1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零

使用一维数组的方式做dp数组,即为滚动数组。也可以用二维数组,像之前一开始那样,不过一位更省空间。

2024-03-12 00:04:52 373

原创 代码随想录算法训练营第四十一天 | 01背包问题 二维

然后在内层循环不断将背包空间大小扩大,直到上限,看看能否放下第二件物品,如果能的话那么我们就把当前背包大小减去第二件物品大小,得到的就是剩余空间,如果剩余空间能放得下第一件物品,那么我们就可以直接将第一件物品和第二件物品相加的价值放进dp数组;通过不断扩大 j ,然后 j 减去weight的剩余也肯定是不断增大的,我们取数组的对应位置,这个位置肯定是我们在前面就计算出的最大价值的位置,这样子就取得一个最大价值,然后在加上这个val,得出的就有可能是最优结果。所以我们就这样子初始化,方便后面进行操作。

2024-03-10 14:24:43 383

原创 代码随想录算法训练营第四十天 | LeeCode 343. 整数拆分 , 96.不同的二叉搜索树

假设节点为3,那么在以1为根节点的情况下,1左边的节点个数为0,右边的节点个数为3-1=2,这就对应了代码里面 i=3 , j=0时候的情况。首先确定好dp数组,这里定为每个数的最大乘积,然后就去逐个比较,既然记录了每个数的最大乘积,那就好比较了,就是时间复杂度大了一点,为o(n^2).例如例子dp【10】就等于dp【6】*4,很好判断。每次拆成n个3,如果剩下是4,则保留4,然后相乘。这是一个结论,我也没去看证明过程,要记住这个结论,以后做类似题目可能就方便一点。比较考验对树的理解和对dp的熟练。

2024-03-08 13:53:10 376

原创 代码随想录算法训练营第三十九天 | LeeCode 62.不同路径 ,63. 不同路径 II

然后每一个格子的方法数就等于他的上面的格子和左边的格子的方法数的和,因为只有这两个办法能走到这个格子。自己缝缝补补写出来的代码,没考虑的细节有很多,都是慢慢补上。相比之下解析的代码就很明了,不但短,而且也少做一点步骤。照葫芦画瓢尝试自己写了一下,结果还是忽略了很多情况。我们要先把第一行和第一列给初始化为0才行。障碍物能出现在起点和终点这我是没想到的。

2024-03-07 17:32:32 973

原创 代码随想录算法训练营第三十八天 | LeeCode 509. 斐波那契数 ,70. 爬楼梯, 746. 使用最小花费爬楼梯

所以我的原则是:不考虑dp[0]如何初始化,只初始化dp[1] = 1,dp[2] = 2,然后从i = 3开始递推,这样才符合dp[i]的定义。还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。从递推公式dp[i] = dp[i - 1] + dp[i - 2];所以dp[i] = dp[i - 1] + dp[i - 2]。

2024-03-06 14:37:09 372

原创 代码随想录算法训练营第三十七天 | LeeCode 738. 单调递增的数字

从最后的两位开始进行比较,如果不是递增的话那么意味着这个数要变小,又要递增又要变小,那只能让前面的一位数减一,后面的一位数变成9。但是我们可以进行一个转换,使用to_string转化为字符串,最后答案再用stoi转化为int。直接对数字进行操作比较麻烦,要进行除法取余。

2024-03-05 22:40:36 402

原创 代码随想录算法训练营第三十六天 | LeeCode 435. 无重叠区间 ,763.划分字母区间 , 56. 合并区间

最后发现是想的太简单了,没有考虑到后面的区间包含的范围比前面的区间小的情况,从而不能找出最小区间,导致不能找到最小删除次数。和昨天的社保气球很像,按照那个思路写了一下,发现还是有些案例不能通过。当右边界right==最远位置就可以把他放进答案里面了。用一个数组来表示出现过字符的最远位置。

2024-03-04 19:12:07 384

原创 代码随想录算法训练营第三十四天 | LeeCode 860.柠檬水找零 , 406.根据身高重建队列 , 452. 用最少数量的箭引爆气球

那么我们先来排列身高,因为如果身高从大到小排好了,那么后面我们在对人数k进行排列,是按照遍历顺序先对高的人进行操作,然后矮的人可以顺理成章的按照人数插在高的前面或后面,因为高的人影响人数,矮的人不影响。根据左边的坐标排列好,然后对右边进行操作,判断右边的边界有没有概括下一个元素的左边界就知道有没有重复了。有两个干扰排列的因素,就是有两个维度。我们要先解决其中一个在解决另一个,如果一起解决只会互相干扰。一个可以想到但是很模糊的思路。常识解题,没有任何思路。

2024-03-03 11:29:35 375

原创 代码随想录算法训练营第三十三天 | LeeCode 1005.K次取反后最大化的数组和 , 134. 加油站 , 135. 分发糖果

题目要求孩子的两边的孩子都要考虑到,如果只是从一边简单的遍历的话只能考虑到一边的孩子,另一边的考虑不到。所以我们从后面再遍历一次,然后如果有重复赋值的孩子就取最大的那一个,这样子就能巧妙达成题目要求,太妙了。起始位置的话我们通过cur来判断,如果什么时候cur小于0,那么在这之前的所有起点都可以舍弃。totalOil是总剩余的油量,其实仔细想想的话,如果总剩余的油量大于等于0的话,那么一定能走一圈。然后就把绝对值大的负数翻转,如果k不为0,并且所有负数都翻转了,那么我们就找最小的数进行翻转就行。

2024-03-01 21:21:52 364

原创 代码随想录算法训练营第三十二天 | LeeCode 122.买卖股票的最佳时机II , 55. 跳跃游戏 , 45.跳跃游戏II

然后我们走到了curdistance的地方,也就是这一步的next distance所对应的地方,因为我们已经更新了nexdistance,所以就当作是在合理范围内走了一步,并选择了最好的下一步,然后我们就把我们已经选好的最远的下一步坐标的值赋给curdistance就行。再看一下这个解答,惊了。细想一下,可不就是这样吗,找相邻的正差值来相加,就是我们要求的了。这就是贪心算法吗,虽然不是很明白,但是确实挺精妙的,其实一开始我按昨天的一个思路,找连续序列的最大值和最小值,写了挺多的if语句,很繁琐。

2024-02-29 21:26:50 352

原创 代码随想录算法训练营第三十一天 | LeeCode 455.分发饼干 ,376. 摆动序列 ,53. 最大子序和

感觉这和平时的思考方式是一样的,就算没有刻意去学什么贪心算法都可以写出这种逻辑的代码,所以会贪心==不会贪心。想法是小饼干满足小胃口的,一直找下去。做是做出来了,但是不明白怎么就是贪心算法了。判断前后的差值是否相反,如果出现相反才改变后的值。就是往大了搞,怎么大怎么搞,如果是负数就丢掉不要。有一点明白所谓的贪心了,大概吧(心虚。时间复杂度o(nlogn)还是看不出有什么贪心的。

2024-02-28 22:16:04 343

原创 代码随想录算法训练营第三十天 | LeeCode 51. N 皇后

最后忽略的一个点导致执行出错的是没有初始化这个vector<string> ,导致isvalue里面判断是否是一个合适的位置时访问到未初始化的元素导致出错,所以我抄了一个初始化的方案,放n个strng,每个string由n个.组成。今天偷懒了,三道题挑了一道n皇后来做,确实有思路,但是如何转换为代码是一个问题。最后用了一个遍历来检验两个斜边,一路比较上去看是否相等就可以了。判断这个位置是否是一个合格的位置,然后就可以进行回溯操作。然后总体上就是一个回溯的模版。

2024-02-27 22:09:29 398

原创 代码随想录算法训练营第二十九天 | LeeCode 491.递增子序列 , 46.全排列 ,47.全排列 II

用一个vector来解决,因为对象是下标而不是元素,所以可以分辨不同下标但是元素值相等的情况。直接用还是会出现重复,如果有重复元素的话。所以就把本层的相同元素跳过。全排列就不用index了,但是要去重,所以用map代替。但是map用使用局限,一旦出现重复数字就不好用了,例如下一题。回溯套路,然后用一个map记录有无出现过,然后比较back和nums[i]的大小。

2024-02-27 17:23:45 347

原创 代码随想录算法训练营第二十七天 | LeeCode 93. 复原 IP 地址 , 78.子集 ,90.子集II

不过有个值得注意的小细节是把pushback放到终止条件的前面,这样子什么都会入数组。这样子就可以入题目所说的空集和单个字符。具体做法是通过在原字符串里面添加句号,如果句号累计3个就可以退出这一层递归。然后写出一个判断当前字符串是否是一个合法的ipv4地址的一部分。梅开二度,使用排序和前后比较进行去重就行,昨天也有类似的。虽然说做过昨天的分割子串会简单一些。但是还是有点看不懂。利用递归回溯来添加句号。

2024-02-24 21:47:51 400

原创 代码随想录算法训练营第二十六天 | LeeCode 39. 组合总和 ,40.组合总和II ,131.分割回文串

这种问题找回文应该早就会了才对,想了半天才想出来。最后抄了卡尔的,感觉挺简洁的,直接用start和end判断回文。我原本是想用栈的,写了很长。写了判断回文函数后,就套模板就行。其实想到了用set来去重。看了一下解析发现这样子简单。大抵方式和上题一样,去重就先排序然后判断这个数和上个数是否相同就行。老三样,还是之前的代码套一下。改变一下结束条件和某些参数就行。

2024-02-23 22:44:46 375

原创 代码随想录算法训练营第二十五天 | LeeCode 216. 组合总和 III,17.电话号码的字母组合

重点是这个递归函数里面的for循环,循环的终止条件不像之前一样是固定的,这个终止条件随着数字的变化而变化,有些数字对应的英文字母有四个,如9。所以要灵活的去判断。模仿昨天的一道题写的回溯算法,核心就是回溯,sum-=i,path.pop_back()。也是套用昨天学的代码,只是换了一些东西。

2024-02-22 18:05:23 344

原创 代码随想录算法训练营第二十四天 | LeeCode 77. 组合,回溯算法

这道题的妙处在于一个nums.pop_back()。因为可以撤销数组最后一个元素,然后进入下一轮循环,通过递归找新的元素。回溯算法,一种暴力的解法。精妙在于用递归实现,可以不用嵌套多层for循环写繁杂的代码,递归套娃下去就行。回溯算法可以解决组合、切割、子集、排列和棋盘问题。

2024-02-21 14:38:15 318

原创 代码随想录算法训练营第二十三天 | LeeCode 669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树, 538. 把二叉搜索树转换为累加树

还是递归的老方法,从根节点出发,如果是比最小值还要小的就往右找,可以直接舍弃这个值找更大的符合的,同理,比最大值还要大的就往左找就行。在这里面有一些细节要注意一下,我们返回的是他的子节点,所以要创建一个指针。然后就是进行一个遍历,符合条件的就不管,不符合条件的才进入if语句进行处理。一个比较巧妙的技巧就是把这个累加值当作一个类的成员变量,这样子就可以在递归之外来改变他的值。这道题还是有点难度的,难点在于如何跳过(删除)一些节点去寻找他的子节点。挺简单的一道题,我看了解析,发现我写的空间复杂度比较高。

2024-02-20 21:03:00 361

原创 代码随想录算法训练营第二十二天 | LeeCode 235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作, 450. 删除二叉搜索树中的节点

情况五:左右孩子都不为空,这时候就要把左孩子和左孩子的全部孩子都移到 右孩子的 左孩子的左边。(因为是二叉树,所以移动父节点就能把他所有孩子节点移动)。(很绕的情况,但是想一想还是能理解。)最后把右孩子赋给这个节点,删除节点。偷懒了,用昨天学的二叉树寻找最近公共祖先的方式做了。情况三,四:左右孩子有一个不为空的,删除节点,孩子补位,返回补位的节点。情况二:找到要删除的节点,左右都为空,直接删除就行,记得返回空指针。利用二叉搜索树的特性,大的放右,小的放左,碰到空就放下就行。比较难理清,特别是第五种情况。

2024-02-19 22:38:34 400

原创 代码随想录算法训练营第二十天 | LeeCode 530.二叉搜索树的最小绝对差 ,501.二叉搜索树中的众数, 236. 二叉树的最近公共祖先

最终返回的有两种可能,一种是最终left和right指针都不为空,这时候就说明找到了p和q,然后就可以返回这个结点root,这个结点就是最近公共祖先结点。然后一层层回溯上去,在函数开始的if判断条件就可以一直把root返回出去。第二种是p和q都在left或都在right这边,那么这就说明,必定有一个结点是另一个的祖先节点,那么,我们返回这个节点就行了。有了昨天的经验,知道二叉搜索树中序遍历得出的是一个升序数组。重写sort的比较方法cmp,然后对vector进行排序。

2024-02-17 21:06:43 376

原创 代码随想录算法训练营第十九天 | LeeCode 654. 最大二叉树,617. 合并二叉树 ,700. 二叉搜索树中的搜索,98. 验证二叉搜索树

单层判断逻辑就是当前结点大于要val,就往左找,小于就往右找。return结果回来就行。两个树同时找结点,如果都存在就相加,如果一方不存在就用另一方,如果都不存在就返回空。判断是否为空或等于要找的值,然后返回根节点,这个就是要找的,也是找到对应的值的返回。和昨天中序后序构造二叉树有异曲同工之妙,有了昨天的经验,顺利做出来了。总之就是找到最大值,然后分割数组,分别把左右数组进递归就行。二叉搜索树的中序遍历是递增的。通过这几天的递归练习,逐渐掌握了一些思想。二叉搜索树就是小的在根节点左边,大的在根节点右边。

2024-02-16 14:39:04 342

原创 代码随想录算法训练营第十八天 | LeeCode 513. 找树左下角的值, 112. 路径总和,113. 路径总和 II,106. 从中序与后序遍历序列构造二叉树

应该是把后续的最后一个拿出来当根节点,中序的根据根结点进行分割成左右子树。后续根据中序所分割成的左子树长度来分割,也能分成左右子树。这样子就分别得出了左子树的中序和后续,右子树的中序和后序。剩下的就是通过递归来连接这个二叉树。返回值就是这个根节点。递归找路线,昨天有类似的题目。递归出口是到叶子结点。比较难以理解,看了解析后懂一点,但没完全懂。层序遍历到最后一层,然后取最左边的值就行。

2024-02-15 22:28:46 325

空空如也

空空如也

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

TA关注的人

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