- 博客(33)
- 收藏
- 关注
原创 代码随想录算法训练营第三十七天 | 完全背包理论基础、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶)
题目链接:文章讲解:视频讲解:题目链接:文章讲解:视频讲解:题目链接:文章讲解:视频讲解:题目链接:文章讲解:。
2024-08-05 20:41:00
134
原创 代码随想录算法训练营第三十六天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
1. 确定 dp 数组及下标含义:2. 确定递推公式:3. 确定dp数组如何初始化:4. 确定遍历顺序:5. 举例推导dp数组。
2024-08-05 20:35:12
62
原创 代码随想录算法训练营第三十五天 | 0-1背包问题 二维、0-1背包问题 一维、416. 分割等和子集
0-1背包:n种物品,每种物品只有一个;完全背包:n种物品,每种物品无限个;多重背包:n种物品,每种物品个数各不相同。
2024-08-04 22:50:52
209
原创 代码随想录算法训练营第三十四天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96. 不同的二叉搜索树
1. 确定 dp 数组及下标含义:dp[ i ][ j ]代表从 (0, 0) 到 (i , j) 有多少种不同的路径2. 确定递推公式:只能由上推下或左推右 ,dp[ i ][ j ] = dp[ i - 1 ][ j ] + dp[ i ][ j - 1 ],其中dp[ i - 1 ][ j ] 代表走到 [ i ][ j ] 上面格子有多少种路径,dp[ i ][ j - 1 ] 代表走到 [ i ][ j ] 左面格子有多少种路径。
2024-08-02 21:04:22
215
原创 代码随想录算法训练营第三十三天 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
1. 动态规划基础;2. 背包问题;3. 打家劫舍;4. 股票问题;5. 子序列问题。1. 确定 dp[ i ] 数组及下标含义;2. 确定递推公式;3.确定dp数组如何初始化;4. 确定遍历顺序(背包问题中很重要);5. 举例推导dp数组。
2024-08-01 22:43:40
290
原创 代码随想录算法训练营第三十二天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树、贪心算法总结
代码随想录 (programmercarl.com)——贪心算法总结。
2024-07-29 09:47:28
200
原创 代码随想录算法训练营第三十天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
题目链接:文章讲解:视频讲解:题目链接:文章讲解:视频讲解:题目链接:文章讲解:
2024-07-29 09:35:05
163
原创 代码随想录算法训练营第二十九天 | 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
cursum累加每个站点剩余油量(gas[i] - cost(i)),如果遇到负,令 i+1 为新的起始位置,看能否跑完一圈。
2024-07-29 09:29:49
280
原创 代码随想录算法训练营第二十八天 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和
假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0],相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。所以只需要统计两天利润的差值,最后将所有整数相加即可。
2024-07-18 16:59:28
298
原创 代码随想录算法训练营第二十六天 | 491.递增子序列、46.全排列、47.全排列 II、332.重新安排行程、51.N皇后、37.解数独、回溯算法总结
代码随想录 (programmercarl.com)——回溯算法总结。
2024-07-16 22:40:50
249
原创 代码随想录算法训练营第二十五天 | 93.复原IP地址、78.子集、90.子集II
题目链接:文章讲解:视频讲解:题目链接:文章讲解:视频讲解:题目链接:文章讲解:
2024-07-16 22:39:54
121
原创 代码随想录算法训练营第二十三天 | 39. 组合总和、40.组合总和II、131.分割回文串
第二个元素的分支不带第一个元素先排序,只要有一个分支sum大于target,则没有必要继续遍历,剪枝。
2024-07-16 22:36:03
281
原创 代码随想录算法训练营第二十二天 | 回溯理论基础、77. 组合、216.组合总和III、17.电话号码的字母组合
修改for循环的范围,len(path)表示已经选取元素的大小,用 (k - len(path) 得到还需要选取元素的个数,至多还剩 (n - ( k - len(path) ) + 2) 个元素需要选取,range函数为左闭右开区间。先用map做一个映射,构造n叉树,结果为n叉树的叶子节点。输入数字的个数,控制树的深度;(1)组合问题:N个数里面按一定规则找出k个数的集合;(2)切割问题:给一个字符串,问右几种切割方式;(3)子集问题:N个数有多少个符合条件的子集;(5)棋盘问题:N皇后,解数独等。
2024-07-15 23:10:39
931
原创 代码随想录算法训练营第二十一天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、二叉树总结
代码随想录 (programmercarl.com)——二叉树总结。
2024-07-12 21:23:05
159
原创 代码随想录算法训练营第二十天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
当遍历根节点比p, q都大的话,说明p, q在左子树里,此时向左遍历;如果当前遍历节点比p, q都小的话,说明在右子树里;如果当前节点位于p, q之间,说明位公共节点。
2024-07-11 21:35:23
246
原创 代码随想录算法训练营第十九天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
中序遍历后,计算两两节点差值。定义一个cur 一个pre两个指针,用cur-pre,用res记录下来差值,res最小值即为所求。遇到二叉树求最值得题目,想一下二叉树遍历时候是否有序!
2024-07-11 16:52:52
351
原创 代码随想录算法训练营第十八天 | 654.最大二叉树、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树
构造二叉树类题目都用前序遍历。
2024-07-10 22:49:57
298
原创 代码随想录算法训练营第十六天 | 513.找树左下角的值、112. 路径总和+113. 路径总和ii、106.从中序与后序遍历序列构造二叉树+105.从前序与中序遍历序列构造二叉树
③ 根节点作为中序数组的切割点,分成左右区间;③ 根节点作为中序数组的切割点,分成左右区间;② 后序数组最后一个元素为根节点;② 前序数组第一个元素为根节点;① 后序数组为0,则空节点;① 前序数组为0,则空节点;⑥ 递归处理左右区间。⑥ 递归处理左右区间。找深度最大的叶子节点。
2024-07-10 13:14:34
416
原创 代码随想录算法训练营第十五天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
运算符 "<<" 表示左移位操作符,假设leftdepth = 3,那么 2 << leftdepth = 2 * 2 ^ 3 = 16。通过父节点判断子节点是否为想要收集的元素,父节点左子节点不为空,且左子节点左右都为空则为我们要操作的元素。,判断左子树和右子树是否为满二叉树(左和右深度相等),相加最后再加根节点1。前序遍历,因为需要父节点指向子节点,并将路径输出。后序遍历,需要一层一层向上返回。
2024-07-09 22:45:58
245
原创 代码随想录算法训练营第十四天 | 226.翻转二叉树、 101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
中序遍历时候注意继续交换左子树,因为处理根节点时候第二层左右交换位置了,原来的右变成现在的左。不建议写中序遍历!!
2024-07-09 13:19:46
353
原创 代码随想录算法训练营第十三天 | 二叉树理论基础、递归遍历、迭代遍历、统一迭代、层序遍历
满二叉树:节点数量。完全二叉树:底部从左到右。二叉搜索树:左子树所有节点小于中间节点,右子树所有节点大于中间节点,时间复杂度为log(n)。平衡二叉搜索树:左子树和右子树高度差不能超过1。链式存储:为一个链表,指针指向两个子节点。线式存储:用一个字符数组保存二叉树,左子节点为 ,右子节点为 。递归遍历(深度优先搜索):一直搜到终点再回头换方向,一般用递归实现,也可以用迭代法解决。常见方式:前中后序遍历,前序遍历——中左右,中序遍历——左中右,后续遍历——左右中,什么序中在哪。层序遍历(广度优先搜索):一层一
2024-07-08 22:19:28
646
原创 代码随想录算法训练营第十二天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、总结
代码随想录 (programmercarl.com)——栈与队列总结。
2024-07-05 20:39:17
259
原创 代码随想录算法训练营第十一天 | 栈与队列理论基础、232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项
(一个队列模拟栈)元素1弹出队列再加入队列,元素2弹出队列再加入队列,重复操作,可以取出队列中最后一个元素。:定义一个栈,每遍历一个元素都要去栈里查找前一个遍历的元素是否匹配,匹配弹出,不匹配存入栈。③多右括号,没有左括号与之匹配,如 [ { } ] ( )[ { } ] ( );②括号类型不匹配,如 [ {:用两个栈改变元素顺序,实现队列。:遇到左括号,把对应右括号加入栈;:入栈所有元素放到出栈里面!
2024-07-01 23:14:51
339
原创 代码随想录算法训练营第九天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串、字符串总结、双指针回顾
代码随想录 (programmercarl.com)——字符串总结。
2024-07-01 10:04:21
178
原创 代码随想录算法训练营第七天 | 454. 四数相加Ⅱ、383. 赎金信、15. 三数之和、18. 四数之和、总结
代码随想录 (programmercarl.com)——哈希表总结。
2024-06-27 23:20:50
697
原创 代码随想录算法训练营第六天 | 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
哈希表理论基础。
2024-06-27 18:13:13
642
原创 代码随想录算法训练营第五天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II、总结
代码随想录 (programmercarl.com)——链表总结。
2024-06-26 17:25:10
274
原创 代码随想录算法训练营第四天 | 链表理论基础、203.移除链表元素、707.设计链表、206.反转链表
在第n个节点前插入节点和删除第n个节点的操作中,cur为n-1个节点,cur.next才为第n个节点,此时才好操作,否则会出现加错位置的情况。思想:定义cur和pre两个指针,cur指向pre,cur和pre向前移动,cur再指向pre,不断重复,直到结束。主要考察链表基本操作:获取第几个节点的值;第n个节点前插入节点;定义cur = head而不是cur = head.next,因为需要上一个元素的指针。需要判断是否为头节点,如果不是直接指针指向下一个节点,如果是将头节点head→next。
2024-06-24 22:41:20
294
1
原创 代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
代码随想录 (programmercarl.com) ——数组总结。
2024-06-24 14:35:29
241
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人