自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 随想录Day41|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

背包问题大致如下图所示其中最基础的就是01背包了。

2023-11-03 18:04:19 93

原创 随想录Day40|343. 整数拆分 ● 96.不同的二叉搜索树

dp[i] = Math.max(Math.max((i - j) * j, dp[i - j] * j),dp[i]),其中j从0遍历到i/2。前面的dp[0] = 0,dp[1] = 0,dp[2] = 1,dp[3] = 2,所以dp[4]的组成元素是不包含前面dp数组的元素在内。当我们利用dp数组中的数推导出dp[i]时,实际上可以把dp[j] 当成是多个数乘积的最优解,其实也是多个数组合起来的。这题的核心思想就是遍历从1-i的所有节点,使之成为头节点,然后计算他们的和最后得到dp[i]

2023-11-01 18:25:30 88

原创 随想录Day39|● 62.不同路径 ● 63. 不同路径 II

机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。

2023-10-31 18:34:01 143

原创 随想录Day38|● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,

2023-10-30 14:13:32 95

原创 随想录Day36|● 738.单调递增的数字 ● 968.监控二叉树 ● 总结

当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是的。给定一个整数n,返回小于或等于n的最大数字,且数字呈。n = 109n = 12341234n = 332299题目要求小于等于N的最大单调递增的整数,那么拿一个两位的数字来举例。例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。

2023-10-29 19:11:16 49

原创 Day35|● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

这题核心思想是找到字母出现最远的下标,然后从现在的下标遍历到最远的下标,期间碰到一个新字母就检测一下其最远出现的下标,如果比现在记录的还要远就更新一下最远下标。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。本题大致方法就是判断区间是否重叠,发现重叠合并就可以了,没发现就记录下上一个重叠的整个区间入结果集。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2023-10-29 18:58:10 24

原创 随想录Day34|● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。

2023-10-29 18:39:32 58

原创 随想录Day33|● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。圆规正传,这道题算是比较难的了,很容易想到了解题办法是两层for循环去一遍遍模拟加油出发的过程,当然这个办法是不可行的,因为最后会超时。此时局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果。

2023-10-29 18:19:58 26

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

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。

2023-10-29 18:02:09 55

原创 随想录Day31|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。

2023-10-24 13:41:05 37

原创 Day29|回溯算法总结

每一个回溯算法的递归回溯过程都可以抽象为一个树形结构(n叉树),在写过树的相关算法题目后相信看到这句话就能想到大概的过程了。

2023-10-23 21:41:45 55

原创 随想录Day28|* 491.递增子序列* 46.全排列* 47.全排列 II

本题是属于树层上的去重后输出的题目,之前我在前几篇文章也说过了这些操作,但是在这题不行,因为要使用往篇的used数组的话一个硬性要求是要数组中元素有序,而本题中若元素有序了之后可能返回的结果就变了。因为我们要进行的是同一层的去重而不影响下一层,所以只要在当层的递归函数中新建一个Set来检测是否有重复的元素就可以了,这样当前层的去重操作不会影响到下一层,因为下一层也是一个新的Set在帮忙去重。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。返回所有不重复的全排列。

2023-10-23 21:12:52 35

原创 Day27|● 93.复原IP地址 ● 78.子集 ● 90.子集II

其实只要在原字符串的基础上进行操作就行了,有些人下意识会创建一个新的字符串来作为路径使用,其实并不需要,只要对字符串相应的地方进行insert一个'.’就可以了,回溯的时候再把这个.删掉,不过java的话修改不了String,新建一个StringBuffer就可以了。其实就是对于新分割出来的区域进行检验,只有新区域符合题目要求了,才能将进行下一步的递归操作,否则直接跳过,写出的检验函数合理即可。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。,用以表示一个 IP 地址,返回所有可能的。

2023-10-23 20:53:37 41

原创 随想录Day26● 39. 组合总和● 40.组合总和II● 131.分割回文串

此题相较于一般的组合问题其实是将组合分割到了字符串中,如何每次精准切割出想要的字符串并判断其合法性是本问题的关键!2 和 3 可以形成一组候选,2 + 2 + 3 = 7。那么本题的关键就在于如何将重复的组合去除,另外又不除掉组合中重复的元素。如果至少一个数字的被选数量不同,则两种组合是不同的。本题相较于常规的组合问题,多了些重复的元素。中的每个数字在每个组合中只能使用。7 也是一个候选, 7 = 7。是正着读和反着读都一样的字符串。对于给定的输入,保证和为。解集不能包含重复的组合。

2023-10-19 21:52:59 26

原创 随想录Day25|今日内容: ● 216.组合总和III● 17.电话号码的字母组合

在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。这题就有一些难度了,倒不是很复杂,但是要想清楚怎么将对应的字符串映射,拿到这些字符串后要怎么去操作并且遍历下一组字符串。我们可以建立一个字符串哈希表,下标对应字符串与手机按键对应的字符串是一样的,这样我们就能通过下标访问到对应的字符串了。该列表不能包含相同的组合两次,组合可以以任何顺序返回。清楚了该题目递归回溯的逻辑,我们就可以着手代码的构建了。的字符串,返回所有它能表示的字母组合。

2023-10-17 10:39:16 49

原创 随想录Day24|今日内容:● 理论基础 ● 77. 组合

像这一题我们并不难想到,有多少个元素就用多少层for嵌套输出答案即可,但是我们代码不可以想套几个就套几个,因为在编译的时候代码已经是写好了,所以这里我们要用递归代替这随机的for循环嵌套次数。回溯法其实就是用递归写的,每一个递归函数都会存在回溯的过程,只是有些递归可能没有用到这个过程而已,大致与之前写过打的一道遍历n叉树节点的题目很像。例如下面这一张图片,与下一个要讲的题目有关,也是先抽象成一个树形结构再进行代码的构建。,是的,我指的是所有回溯法的问题都可以抽象为树形结构!

2023-10-17 10:24:49 22

原创 随想录Day22|今日内容:● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇

注意观察题目中给的例子,可以发现题目中累加的意思就是按照右中左的顺序,将上一个节点的数值加入到当前节点中,遍历完整个树后累加树就转换成功了,那么现在的问题就在于怎么保存上一个节点的数据了。我在前几篇文章中已经分析过这个问题,本质上就是想让中间节点进行操作之后,再让cur指向当前节点,这样就能形成一个滞后在上一个节点的指针了,下面请看代码。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。所以结果应当返回修剪好的二叉搜索树的新的根节点。

2023-10-14 12:01:20 26 1

原创 随想录Day21|今日内容: ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

而如果说当前节点与p、q中的某一个节点相等,那么只能说明一种情况,那就是祖先必然就是当前节点,因为另一个节点必然位于当前节点的左右子树中。这一题中插入节点是必然的处于叶子结点下面的,所以只需要确认当前节点左孩子为空或者右孩子为空,且插入值小于或大于当前节点就可以了。所以我们只要设置如下操作,最后只要将当前节点的孩子节点指针返回给上一个节点,就可以实现父节点指向删除节点的孩子节点的操作了。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

2023-10-13 19:39:58 24

原创 随想录Day20|今日内容 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

因为平衡二叉树节点的性质是左子树的所有元素大于节点元素,右子树的所有元素大于节点元素,根据这一性质特点,选择中序遍历便可以让整体遍历的元素单调递增,这样问题便也转化为了如何在一个元素排列从小到大的数组里找出最小的差值,相信大家看到这种题目一定就能马上写出来了。因为情况一是需要通过当前节点判断得出的答案,而情况二是通过子节点返回值判断得出的答案,如果先判断子节点的结果的话很容易就漏掉了上当前节点上的答案,最后得不出结果,这一点是需要大家注意的.2.节点p,q处于不同的子树上,二者的祖先处于树的更高的高度。

2023-10-12 20:12:32 28

原创 随想录Day19|● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树

除此之外我们还有另一种更高效的方法,那就是保存好当前中序遍历元素的前一个节点,然后判断前一个节点的数据是否小于当前节点,不小于的话返回一个false就可以了,代码如下。根据平衡搜索树的特性,按中序顺序遍历的元素组合而成的数组实际上是单调递增的,所以我们可以将中序遍历的结果保存到一个数组中,然后对这个数组是不是单调递增进行一个验证。- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。返回以该节点为根的子树。根节点的值是 5 ,但是右子节点的值是 4。

2023-10-12 13:43:10 27

原创 随想录Day17|今日内容:力扣 ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

这题实际上用到了递归以及回溯的思想,通过递归找到路径,通过回溯,找到上一次分岔路口,最后找出全部的答案。首先应当创建两个集合,一个是存放字符串的结果数组,另一个是存放int类型数据的路径数组。由于题目中要求的答案是一个规定格式字符串的数组,所以说还考了一些字符串的拼接。在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。,返回所有从根节点到叶子节点的路径。给你一个二叉树的根节点。是指没有子节点的节点。

2023-10-09 12:06:40 31 3

原创 随想录Day15|今日内容:力扣 ● 104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数

比如说题目中求的是从根节点到叶子结点的最小距离,那么如果只是ctrl c+v第一题的代码,然后比较两个节点的高度,返回最小那一个,那么这样的话就把空节点的高度也算进去了,所以我们要针对这一点,排除空节点的干扰,代码如下。在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。叶子节点是指没有子节点的节点。

2023-10-07 12:33:06 24 1

原创 随想录Day14|力扣102. 二叉树的层序遍历、 226.翻转二叉树 、101.对称二叉树2

使用队列进行层序遍历的核心在于,提前确定好该层的元素,然后提前把下一层的所有元素入队,最后按规定好的元素个数出队即可。思路:层序遍历相当于图论中的广度优先,一层一层的去遍历树中的元素,在此使用队列的结构进行层序遍历算法的实现。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。本题我们首先要思考的也应该是用什么样的遍历方式去遍历整个树进行操作,到底前中后序该用哪一个呢?但都可以理解算是后序遍历,尽管已经不是严格上在一个树上进行遍历的后序遍历了。

2023-10-06 20:25:45 32 1

原创 Day13|今日内容:递归遍历、 迭代遍历

【代码】Day13|今日内容:递归遍历、 迭代遍历。

2023-10-06 19:47:21 22 1

原创 随想录Day12|239. 滑动窗口最大值● 347.前 K 个高频元素

因为我们是要维护n个数据里面k个最大的数据,队列里的容量仅为k,所以在队列元素已经满了的时候,我们插入新元素时需要对比的就是队列中最小的元素,为了快速的到这个最小的数据所以我们使用小顶堆,如果新数据>最小的数据就入队,最小数据也要出队;然后是对题目的求解,我们要对k之前的数据以及k之后的数据分开处理,因为在k之前滑动窗口并不是完整的,需要把数据全部放入才能得到这一组的答案,之后便是每增加一个新元素删除一个老元素为新的一组数据,循环往复找出每一组的最大值即可得出答案。//查看的是队尾的元素。

2023-10-06 19:35:38 26 1

原创 随想录Day11|今日内容: 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

例如:4 + 13 / 5,这就是中缀表达式,计算机从左到右去扫描的话,扫到13,还要判断13后面是什么运算符,还要比较一下优先级,然后13还和后面的5做运算,做完运算之后,还要向前回退到 4 的位置,继续做加法,你说麻不麻烦!例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。那么将中缀表达式,转化为后缀表达式之后:["4", "13", "5", "/", "+"] ,就不一样了,计算机可以利用栈来顺序处理,不需要考虑优先级了。

2023-10-03 15:03:39 18

原创 随想录Day10|232.用栈实现队列、225. 用队列实现栈

本题只需要一个队列足矣,因为把队列前size-1个元素出列又入列后,剩下一个元素便是最后入列的元素,此时将该元素出列便可实现出栈的操作。获取栈顶元素要注意,在取到最后一个元素后别忘了再将其出列入列,以回复队列或者说模拟栈 的初始状态。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(注意对于将进栈元素出到出栈中实现反转时,一定要把全部元素都出栈保证次序一致。请你仅使用两个栈实现先入先出队列。

2023-10-02 22:00:05 41 1

原创 随想录Day8|力扣344.反转字符串、 541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须、使用 O(1) 的额外空间解决这一问题。思路:本题目只要是考验对字符串的基本操作能力,看一遍代码就懂思路了给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。

2023-10-02 21:47:35 55 1

原创 随想录DAY7|力扣解题454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和

a之所以得那么操作是因为在每个元素上时都不确定结果,所以在去重时采用nums1[i] == nums1[i+1]的判断方法很容易就把结果集中的元素给去掉了,而b、c可以在保存了数据之后再进行去重的操作,这样就规避了a的问题了,所以他们两者的判断条件分别为nums1[left] == nums1[left+1]与nums1[right] == nums1[right-1]。就是nums1[i] == nums1[i-1],因为这个判断条件只会跳过输入过结果的元素,符合题目的要求.

2023-09-26 19:45:01 36 1

原创 随想录DAY5|力扣解题242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

此题题意很简单,就是让我们找出两个字符串的各个小写字母个数是否相等,那么我们只要统计出两个字符串中每个字符出现的数量就可以对比得出答案了,而字母只有26个,很容易想到用一个int类型的哈希数组去保存这些字母出现的次数,而用其下标作为各个字母的索引,对比后的出最后了结果。当然,我们其实也不用创建出两个数组去存放结果,只需要当字符串s中出现一个字母就在对应下标+1,字符串t中出现一个字母就在对应下标-1,最后判断数组数值是不是全为0就可以了,下面是代码演示。整数,并返回它们的数组下标。,请你在该数组中找出。

2023-09-25 21:32:45 102 1

原创 随想录DAY4|力扣24. 两两交换链表中的节点、19. 删除链表的倒数第 N 个结点面试题、 02.07. 链表相交、142. 环形链表 II、链表的难点及总结

题目说的是删除倒数第n个节点,那么就可以确定删除节点的前一个节点pre到链表的末尾的空节点的距离差为n+1,根据这一点设置一个快指针探查链表的结尾,一个慢指针定位删除节点的前驱pre,快指针比慢指针先走n+1步即可实现这个方法,代码如下。想要完成这一操作,应当要操作三个节点,交换的节点有两个,而两个节点的前驱cur有一个,合在一起三个,完成这一操作,最好是把指针节点给到两个操作节点的前驱cur,这样操作与判断起来思路会更加清晰,在此借用卡哥的图进行说明。,请你找出并返回两个单链表相交的起始节点。

2023-09-23 21:34:43 99

原创 随想录DAY3|203.移除链表元素、707.设计链表、206.反转链表

使得它的下一个节点为头结点,这样操作虚拟头结点dummyHead.next = dummyHead.next.next,便能够实现对于头结点的移除,下面是代码实现。思考完三类元素的删除方式后,会发现处于链首的元素删除方式是与其他两者不同的,我们可以选择在代码中加入一个if判断对其进行特殊处理,又或者说,可以用一个更巧妙的办法把链首元素的操作调整为与其他两者一致的操作,那便是加入虚拟头结点dummyHead。首先思考,在链表中的处于链首,链中,链尾这三种位置的元素采用的移除方式是否是相同的,首先看链首。

2023-09-23 11:03:14 25 1

原创 代码随想录算法训练营第二天 | 有序数组的平方、长度最小的子数组、螺旋矩阵 II

在一个有序的数组所有元素取平方之后,原先的数组大小顺序会因为负数的存在而发生改变,但依然遵从一定的规律,例如从开始元素到0元素的大小是递减的,0元素到最后元素的大小是递增的,可以依据这个规律利用双指针将两边较大的元素依次返回,实现一个时间复杂度为O(n)的算法去解决这个问题。思路:首先确定进行循环的次数,然后思考当n为奇数与n为偶数之间形成的矩阵对于循环结果有什么影响,两者差别便在于循环结束后矩阵中心是否漏下一个区域没有进行赋值,因此在算法的最后要对n为奇数的矩阵中心进行最后的赋值。

2023-09-21 18:23:51 174

原创 代码随想录算法训练营第一天 | 二分查找、移除元素

首先要把要查找的目标target定义在一个区间里,如[left,right]或者[left,right),然后对这两个下标进行调整,最后锁定目标值target的下标,定义的区间不同则实现的方法也会不同,下面以这两个区间为例。

2023-09-20 19:56:20 207 1

空空如也

空空如也

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

TA关注的人

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