- 博客(36)
- 收藏
- 关注
原创 代码随想录训练营第三十九天|343. 整数拆分96.不同的二叉搜索树
343. 整数拆分1确定dp数组(dp table)以及下标的含义数字i的分割最大乘积为dp[i]2确定递推公式3dp数组如何初始化dp[2]=14确定遍历顺序从3开始遍历5举例推导dp数组。
2024-02-26 09:59:00
372
1
原创 代码随想录训练营第三十九天|62.不同路径63. 不同路径 II
1确定dp数组(dp table)以及下标的含义从(0,0)出发到(i,j)有 dp[i][j]种路径2确定递推公式3dp数组如何初始化i<m;i++)j<n;j++)4确定遍历顺序从左上到右下5举例推导dp数组、m=2,n=2时dp[1][1]=2。
2024-02-23 16:09:32
381
原创 代码随想录训练营第三十七天|509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯
思路:从顶层倒推,到i-1层有dp[i-1]种方法,再加一步即可;到i-2层有dp[i-2]种方法,再加两步即可,所以dp[i]=dp[i-1]+dp[i-2],形成了斐波那契数。思路:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])例如写一下n=6时的dp,如果最后代码写出来结果不对,打印一下数组看看和推导数组是否一致。不存在i=0的情况,所以初始化为dp[1]=1,dp[2]=2。dp[i]的定义为:第i个数的斐波那契数值是dp[i]5.举例子推导遍历顺序。
2024-02-22 15:06:08
434
原创 代码随想录训练营第三十七天|738.单调递增的数字968.监控二叉树
时间超限。flag确立为strNum的最后一个,发现一个不符合规则的数则让它减一,后面所有的数变成9999...
2024-02-21 17:27:10
384
1
原创 代码随想录训练营第三十四天|435.无重叠区间763.划分字母区间56. 合并区间
局部最优:重叠区间删掉;全局最优:最少删掉重叠区间按照右边界进行排序,设置end为非重叠边界,初始化为第一个区间的右边界,当end与遍历到的区间左边界不重叠(小于),更新end为该遍历到的区间的右边界,count++,计算非重叠区间数量,用总数减去即可。
2024-02-21 11:23:18
338
原创 代码随想录训练营第三十四天|860.柠檬水找零406.根据身高重建队列452. 用最少数量的箭引爆气球
局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。
2024-02-04 16:33:39
201
原创 代码随想录训练营第三十四天|1005.K次取反后最大化的数组和134. 加油站135. 分发糖果
首先将数组按绝对值从大到小排列,然后对于数组中的负数取相反数(如果k比负数多,就把最后的(绝对值最小的)取相反数)贪心:局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。
2024-01-31 16:37:03
182
原创 代码随想录训练营第三十一天|122.买卖股票的最佳时机II55.跳跃游戏45.跳跃游戏II
不断更新cover,直到cover能覆盖所有nums否则false。利用for循环中的i<=cover来在覆盖范围中搜寻。本题关键在于看覆盖的范围。
2024-01-30 11:10:47
164
原创 代码随想录训练营第三十一天|理论基础455.分发饼干376. 摆动序列53.最大子序列和
贪心算法唯一的难点就是如何通过局部最优,推出整体最优;如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划;如何验证可不可以用贪心算法呢?
2024-01-25 15:54:18
388
原创 回溯算法回顾
2.去重操作,采用used数组对于元素是否取用进行标记,注意要对数组中的元素进行排序,有两种去重,树层去重和树枝去重,如果查询used[i]==true则同枝使用,used[i]==false树层已用。可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。5.排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合,这和之前分析的子集以及组合所不同的地方。
2024-01-20 14:48:35
599
原创 代码随想录训练营第三十天|332.重新安排行程51. N皇后37. 解数独
采用哈希表方式进行储存出发点和到达点,终止条件是result中的机场数量为机票+1;重点在于哈希表的运用和遍历方法。
2024-01-19 17:25:19
639
原创 代码随想录训练营第二十九天|491.递增子序列46.全排列47.全排列 II
回溯三部曲:参数输入:nums[],startIndex终止条件:因为path至少为2,所以path.size()>1单层搜索逻辑:同一父节点下的同层上使用过的元素就不能再使用了。
2024-01-18 15:52:34
555
原创 代码随想录训练营第二十八天|93.复原IP地址78.子集90.子集II
求排列问题的时候,就要从0开始,因为集合是有序的,{1, 2} 和{2, 1}是两个集合。单层操作:s.insert(s.begin() + i + 1, '.');本题和上一题的区别在于去重操作吗,本题为树层去重,还有一种树枝去重。终止条件,startIndex>=nums.size();同分割回文串很像,此题也需要判断是否为何事的IP地址符;终止条件为:逗点等于3个,并且最后一段符合IP地址要求。输入参数整数数组,其实搜索位置startIndex,输入字符串,起始搜索位置和添加逗点的位置;
2024-01-15 17:21:01
436
原创 代码随想录训练营第二十七天|39. 组合总和40.组合总和II 131.分割回文串
输入数组和目标数;输出解集二维数组;终止条件:sum==target,result.push_back(),return;单层循环:sum+=path剪枝优化:再上一个版本中,即使sum大于target,也要进入下一层递归,这里优化可以在本层拒绝进入下一层;换成。
2024-01-14 17:23:25
409
原创 代码随想录训练营第二十五天|77.组合优化216.组合总和III17.电话号码的字母组合
则在for循环横向遍历时不用全部遍历完,遍历到n-(k-path.size())+1即可;单层循环逻辑:将index指到的数字,根据数字在固定的表中找到相应的字符集。确定回溯函数参数:将0-9对应字符的表格传进去,还有题目给的index。如果存在一种情况比如n=4,k=4.可以不用遍历i=2及以后的树了。终止条件:path.size() 和 k相等并且sum==n;终止条件:当digits.size()==index。输入输出为:n,k,
2024-01-12 19:39:57
423
原创 代码随想录训练营第二十二天|669. 修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树
中层采用双指针,pre指下层和cur指本层,cur循环累加pre,pre向上指向cur->val。输入二叉树根节点和L和R;终止条件:遇到空指针就返回。输入二叉树,输出二叉树;有问题再看,答案错了么。单层循环:右中左的顺序。
2024-01-10 20:03:05
396
原创 代码随想录训练营第二十二天|235.二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点
思路:因为二叉树为二叉搜索树,如果两个目标值为p和q,那么从上到下遍历,第一个遇到的pvalval,向右遍历。
2024-01-09 16:28:38
447
原创 代码随想录训练营第二十一天|530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236. 二叉树的最近公共祖先
思路:采用将二叉树转换成数组,然后采用新建一个数组储存上一个数组的相邻两数之差(因为是二叉搜索树),在新建的数组中寻找最小值即可。
2024-01-08 20:05:53
366
原创 代码随想录训练营第二十天|654.最大二叉树617.合并二叉树700.二叉搜索树中的搜索98.验证二叉搜索树
采用递归的方法,总体思路为先找到最大元素作为根节点,然后以此对于左右进行分割,形成新的数组,在新数组中继续以上的行为,直到新数组仅剩1个元素退出递归但是这个代码在力扣上无法提交,因为量太大:进行优化,不再创建新的数组,而是在原数组上尽心操作:代码中定义了一个名为Solution的类,该类包含一个私有成员函数traversal和一个公共成员函数。traversal函数用于递归地构造最大二叉树。它接受一个整数向量nums、左边界left和右边界right作为参数,并返回构造的二叉树的根节点。
2024-01-07 18:57:41
455
1
原创 代码随想录训练营第十七天|513.找数左下角的值112.路经总和
本题适合采用迭代法,也就是层序遍历法,采用当i==1时候,将node赋值result的方式来获取最左值。
2023-12-31 10:58:01
377
原创 代码随想录训练营第十六天|110.平衡二叉树257.二叉树所有的路径404.左叶子之和
思路对于一个节点,将其左右节点各传入求解其最大深度,然后比较即可;本体用的是,当发现一个子树为不平衡二叉树时直接返回-1,递归思想:确定返回值和参数;确定终止条件;确定单层循环逻辑。
2023-12-30 22:53:34
429
1
原创 代码随想录训练营第十五天|104.二叉树的最大深度111.二叉树最小深度222.完全二叉树的节点个数
求高度用后序遍历,求深度用前序遍历,但是求最大的话,是一样的用后续遍历从后往前遍历:当左右都是null的时候,返回上一级的取左右最大值的同时+1,这样用于层数记录。
2023-12-29 21:50:52
474
1
原创 代码随想录训练营第十五天|102. 二叉树的层序遍历107. 二叉树的层序遍历II199.二叉树的右视图637.二叉树的层平均值226.反转二叉树101.对称二叉树
层序遍历是一种树遍历方法,其中每个节点都被访问一次,并且每个节点都按照从上到下、从左到右的顺序被访问。代码中定义了一个名为Solution的类,该类中包含一个公共成员函数levelOrder,它接收一个指向二叉树根节点的指针root,并返回一个二维整数向量,表示二叉树的层序遍历结果。levelOrder函数使用了队列数据结构来实现层序遍历。首先,如果根节点不为空,将其加入队列。然后,进入循环,直到队列为空为止。在每次循环中,先获取当前队列的大小(即当前层的节点数),然后创建一个整数向量vec。
2023-12-29 16:08:40
418
1
原创 代码随想录训练营第十四天|144. 二叉树的前序遍历
首先定义一个traversal函数,前序遍历采用中左右,分别为vec.push_back(cur->val);写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
2023-12-26 20:20:26
394
1
原创 代码随想录训练营第十三天|239.滑动窗口最大值347.前 K 个高频元素
先看标准答案:采用单调队列,不在乎具体的弹入弹出,只寻求最大值,前面的数值小则弹出,大则保留。想到可以使用两个栈实现队列形式可以实现先进先出,新进的整数与原来的最大数进行比较。
2023-12-25 21:26:34
477
原创 代码随想录训练营第十一天|20.有效的括号 1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值
通过往栈中放置相反的括号,然后利用栈先进后出的特性完成对应的检测,最后检测如果栈中没有元素了,就为真。
2023-12-25 19:14:59
393
原创 代码随想录训练营第十天|232.用栈实现队列 225用队列实现栈
stin.top()返回stack的栈顶元素,也就是最后进入栈的元素;this->pop()利用队列先进先出的规则获取第一个元素。
2023-12-22 11:04:24
626
原创 代码随想录训练营第九天|KMP算法 回顾哈希表
主要就是将最长相等前后缀计算出来,这个比较简单,主要作用就是不浪费之前找到的匹配的数组,但是不理解为啥:如果这个时候我设置文本串的5是c不是和前缀后面的b相同应该怎么办呢?有待考究hhNO1初始化NO2处理前后缀不相同的情况NO3处理前后缀相同的情况NO4更新NEXT。
2023-12-21 17:14:18
666
原创 代码随想录训练营第八天|343.反转字符串541.反转字符串151.反转字符串里的单词 卡码网:54.替换数字 卡码网:55.右旋转字符串
比较简单;
2023-12-20 16:43:46
803
原创 代码随想录算法训练营第七天 | 454.四数相加383. 赎金信
思路:先在AB数组里面求两数的和,放进一个数组里面,再在CD数组中找两个数的和,放进一个数组里面,然后在CD中找有无两个数的和。
2023-12-19 19:02:07
554
1
原创 代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表中的倒数第N个节点02.07.面试题链表相交142.环形链表
在这段代码中,本意是将相邻的两个节点进行交换。在这个循环中,cur->next和是需要交换的两个节点,而则是为了保持链表的连接关系而保存下来的。
2023-12-17 20:57:59
44
1
原创 代码随想录算法训练营第三天 | 203.移除链表元素 707.设计链表206.反转列表
首先学习链表基础知识,单链表中的指针域只能指向节点的下一个节点。双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。文章链接:代码随想录代码随想录PDF,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文。
2023-12-15 21:19:47
43
原创 代码随想录算法训练营第二天 | 704二分查找、27移除元素
思路:我真的形成思维定式了,一上来马上想到暴力求解,我真的会for,但我真的恨for,ps一个小知识点:sort(起始地址,终止地址,greater<int>(),less<int>())容器排序。当然暴力算法是不行的,采用双指针,3种情况,其中=与>可以 合并,因为while (left<=right),当right--后会小于left,退出while。思路:采用i来确定大范围,j来确定小范围,将所有成立的元素尾插进一个容器中,再在容器中寻找最小元素;减去i位置元素同时将起始位置向前移动;
2023-12-14 19:55:53
46
1
原创 代码随想录算法训练营第一天 | 704二分查找、27移除元素
二分查找为什么总是写错?,如果回到大一,我绝不会再刷算法题|回忆我的大学学习生活,【LeetCode 每日一题】27. 移除元素 | 手写图解版思路 + 代码讲解,一个视频带你彻底搞懂双指针算法——链表4:力扣2130.链表最大孪生和(中等题),leetcode-双指针篇 27题 移除元素,6-1-4数组元素的删除,【LeetCode 每日一题】88. 合并两个有序数组 | 手写图解版思路 + 代码讲解,当你过度准备了一场代码面试时……思路:第一想到使用暴力求解,遍历数组寻找相同元素输出下标;
2023-12-13 15:15:50
204
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅