自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划Day42-Day57

动态规划01背包理论基础01背包理论基础(滚动数组)416. 分割等和子集1049.最后一块石头的重量II494.目标和474.一和零动态规划:完全背包理论基础518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯(进阶版)322. 零钱兑换279.完全平方数139.单词拆分多重背包理论基础198.打家劫舍213.打家劫舍II337.打家劫舍 III121. 买卖股票的最佳时机122.买卖股票的最佳时机II123.买卖股票的最佳时机III188.买卖股票的最佳时机

2023-12-20 19:43:18 87

原创 代码随想录Day41—343. 整数拆分 96.不同的二叉搜索树

代码随想录Day41—343. 整数拆分 96.不同的二叉搜索树343. 整数拆分递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));遍历顺序:先来看看递归公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j)); dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。96.不同的二叉搜索树dp[3] = dp[2] *

2023-12-04 19:52:50 87

原创 代码随想录Day39—62.不同路径 63. 不同路径 II

【代码】代码随想录Day39—62.不同路径 63. 不同路径 II。

2023-12-03 10:28:48 78

原创 代码随想录Day38—509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!

2023-12-03 10:25:46 85

原创 代码随想录Day37— 738.单调递增的数字

代码随想录Day37— 738.单调递增的数字738.单调递增的数字一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9从后向前遍历

2023-12-03 10:19:30 71

原创 代码随想录Day36—435. 无重叠区间 763.划分字母区间 56. 合并区间

代码随想录Day36——435. 无重叠区间 763.划分字母区间 56. 合并区间435. 无重叠区间照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数。763.划分字母区间在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了前面出现过所有字母,最远也就到这个边界56. 合并区间先排序,让所有的相邻区间尽可能的重叠在一起按照左边界从小到大排序之后,如果 intervals[

2023-12-03 10:16:40 18

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

只需要维护三种金额的数量,5,10和20。有如下三种情况:情况一:账单是5,直接收下。情况二:账单是10,消耗一个5,增加一个10情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。

2023-11-28 17:34:41 36

原创 代码随想录25期训练营day34—LeetCode 1005 K次取反后最大化的数组和 134 加油站 135分发糖果

代码随想录25期训练营day34—1005 K次取反后最大化的数组和 134 加油站 135分发糖果1005 K次取反后最大化的数组和比较简单,注意排序方式134 加油站只想到暴力解法i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum135分发糖果一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较

2023-11-28 17:29:22 16

原创 代码随想录25期训练营day32 —LeetCode 122买卖股票的最佳时机 55跳跃游戏 45跳跃游戏II

代码随想录25期训练营day32 —LeetCode 122买卖股票的最佳时机 55跳跃游戏 45跳跃游戏IILeetCode 122买卖股票的最佳时机非常简单的中等题55跳跃游戏贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。45跳跃游戏II心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不考虑是

2023-11-25 19:06:54 20

原创 代码随想录Day31—455分发饼干 376摆动序列 53. 最大子序和

情况一:上下坡中有平坡。情况三:单调坡中有平坡。情况二:数组首尾两端。

2023-11-24 15:48:55 23

原创 代码随想录Day30-332.重新安排行程,51. N皇后,37. 解数独

【代码】代码随想录Day30-332.重新安排行程,51. N皇后,37. 解数独。

2023-11-23 14:58:15 32

原创 代码随想录Day25-Day29:回溯算法

问题:两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

2023-11-23 14:15:51 25

原创 代码随想录Day24-回溯基础

【代码】代码随想录Day24-Day27 补打卡。

2023-11-20 17:39:32 54 1

原创 代码随想录Day20-Day23 补打卡

代码随想录Day20-Day23 补打卡654.最大二叉树构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树;要判断maxValueIndex > 0,因为要保证左区间至少有一个数值;判断maxValueIndex < (nums.size() - 1),确保右区间至少有一个数值;617.合并二叉树因为是传入了两个树,那么就有两个树遍历的节点t1 和 t2,如果t1 == NULL 了,两个树合并就应该是 t2 了(如果t2也为NULL也无所谓,合并之后

2023-11-20 17:25:02 30 1

原创 代码随想录Day18——513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

【代码】代码随想录Day18——513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树。

2023-11-16 21:11:09 74 1

原创 代码随想录Day17—110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

代码随想录Day17—110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和110.平衡二叉树比较高度,必然是要后序遍历明确递归函数的参数和返回值:参数:当前传入节点。 返回值:以当前传入节点为根节点的树的高度。如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则明确终止条件递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0明确单层递归的逻辑如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的

2023-11-11 08:44:04 302 1

原创 代码随想录Day16—104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

代码随想录Day16—104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数104.二叉树的最大深度二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)而根节点的高度就是二叉树的最大深度,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。111.二叉树的最小深度最小深度是从根节点到最近叶子节点的最短路径上

2023-11-09 22:12:46 401 1

原创 代码随想录算法训练营第15天—层序遍历 226.翻转二叉树 101. 对称二叉树

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。

2023-11-08 09:38:39 667 1

原创 代码随想录算法训练营第14天—144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历

确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

2023-11-07 16:28:07 716

原创 代码随想录算法训练营第13天—239. 滑动窗口最大值 347. 前 K 个高频元素

代码随想录算法训练营第13天—239. 滑动窗口最大值 347. 前 K 个高频元素239. 滑动窗口最大值单调队列:利用双端队列手动实现单调队列;设计单调队列的时候,pop,和push操作要保持如下规则:pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止347. 前 K 个高频元素

2023-11-06 16:01:16 766 1

原创 代码随想录算法训练营Day11—20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

代码随想录算法训练营Day12—20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值20. 有效的括号有效利用栈处理;1047. 删除字符串中的所有相邻重复项有效利用栈处理;栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。150. 逆波兰表达式求值后缀表达式;使用栈处理。

2023-11-04 13:28:24 875 1

原创 代码随想录算法训练营第九天—232.用栈实现队列,225. 用队列实现栈

代码随想录算法训练营第九天—232.用栈实现队列,225. 用队列实现栈基础知识栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能);我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构;deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了;队列中先进先出的数据结构,同样不允许有遍历行为,不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。

2023-11-03 20:51:04 929

原创 代码随想录算法训练营第八天—KMP算法

代码随想录算法训练营第八天—KMP算法28. 实现 strStr()KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。next数组就是一个前缀表,前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配;前缀表:记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀;前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串。构

2023-11-02 21:31:46 1104

原创 代码随想录算法训练营第八天—344.反转字符串、541.反转字符串II、151.翻转字符串里的单词

代码随想录算法训练营第八天—344.反转字符串、541.反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串344.反转字符串可以用swap;从两边开始替换;swap的两种写法。541.反转字符串IIreverse(s.begin() + i, s.begin() + i + k )if条件的先后会有影响剑指Offer 05.替换空格扩充数组到每个空格替换成"%20"之后的大小;从后向前替换空格,也就是双指针法;s

2023-11-01 22:16:28 1132

原创 代码随想录Day7-454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

代码随想录Day7—454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和454.四数相加II使用map 巧妙解决其实不难383. 赎金信使用数组做哈希(小写字母类)不难15. 三数之和好难,没思路;可以排序啊!continue语句不会直接调到整个循环的后面,而是跳回至条件判断,这样当前一轮循环剩余的代码不会执行,而新一轮的循环依旧可以继续进行;只有有元素重复出现在数组里,才会有可能得到重复的三元组;排序之后的去重写法:if (i > 0 &am

2023-10-31 20:58:11 1392 1

原创 代码随想录Day6—— 哈希表:242.有效的字母异位 349. 两个数组的交集 202. 快乐数 1. 两数之和

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。

2023-10-30 22:26:40 1515 1

原创 代码随想录算法训练营第四天 _ 链表 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

代码随想录算法训练营第四天 _ 链表 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II24. 两两交换链表中的节点用虚拟头结点;Cur始终是要交换的两个节点前面的;捋清楚交换关系后并不难。19.删除链表的倒数第N个节点双指针的操作;删除第N个节点,那么我们当前遍历的指针一定要指向 第N个节点的前一个节点;写完之后用测试用例梳理一下是否正确。02.07. 链表相交数值相同,不代表指针相同;写了个暴力循环,居然过

2023-10-28 12:05:19 1621 1

原创 【无标题】

代码随想录算法训练营第三天 _ 链表 203.移除链表元素、707.设计链表、206.反转链表203.移除链表元素忘记建个temp,然后删除释放空间;Cur的转移要思考细致;结束条件 Cur->next!=NULL。707.设计链表每个函数都知道怎么写,就是不知道在类里面怎么写,没读明白题;还是注意链表的长度和转移问题。206.反转链表双指针法递归法(仔细理解理解)

2023-10-27 21:21:42 1557

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

代码随想录算法训练营第二天| 977.有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵Ⅱ977.有序数组的平方想到双指针,没想到从左右开始每次比较完左右后只往新数组存一个更快209. 长度最小的子数组本质还是双指针思路起始指针和结束指针一起移动,非固定起始指针59.螺旋矩阵Ⅱ一开始想不明白最外层用啥循环有多少层进行多少次循环

2023-10-26 15:41:29 2001

原创 代码随想录算法训练营第一天

要点:要点:

2023-10-25 20:26:21 1162

空空如也

空空如也

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

TA关注的人

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