- 博客(44)
- 收藏
- 关注
原创 代码随想录算法训练营第五十二天|123.买卖股票的最佳时机III 、188.买卖股票的最佳时机IV
确定dp数组以及下标的含义:dp[i][0]:不进行买卖操作;dp[i][1]:第i天第一次持有股票的最大利润;dp[i][2]:第i天第一次不持有股票的最大利润;dp[i][3]:第i天第二次持有股票的最大利润;dp[i][4]:第i天第二次不持有股票的最大利润;dp数组如何初始化://不操作//第一次持有//第一次不持有//第二次持有//第二次不持有确定遍历顺序:从前向后遍历。打印dp数组。int。
2024-06-07 16:46:31 149
原创 代码随想录算法训练营第五十天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III
dp数组表示,每个节点偷当前节点和不偷当前节点可以取得的最大价值。要求当前节点值需要知道左右节点的值,所以是后序遍历。最后再偷根节点和不偷根节点之间取一个最大值即可。偷第一家就不能偷最后一家,偷最后一家就不能偷第一家,分别将两种状态求出,再从二者之间找最大值。两种情况分别可以用上题方法求解。
2024-06-05 23:04:56 346
原创 代码随想录算法训练营第四十九天|139.单词拆分、km56. 携带矿石资源、背包问题总结篇
结果类型不同求最大价值:dp[j]=max(dp[j],dp[j-muns[i]]+value[i])求背包装满的最大物品数:dp[j]=max(dp[j],dp[j-muns[i]]+1),非0下标初始为0。求背包装满的最少物品数:dp[j]=min(dp[j],dp[j-muns[i]]+value[i]),非0下标初始为INT_MAX。求装满有几种装法:dp[j]+=dp[j-num[i]]背包类型不同。
2024-06-04 14:58:19 415
原创 代码随想录算法训练营第四十八天| km57. 爬楼梯、322. 零钱兑换、279.完全平方数
一样,求组成背包重量值时元素的个数,不同的是本题求得是最少个数,474.一和零求的是最大个数。提前准备完全平方数集合,作为物品。
2024-06-03 23:06:20 560
原创 代码随想录算法训练营第四十六天|KM52. 携带研究材料、518. 零钱兑换 II、377. 组合总和 Ⅳ
【代码】代码随想录算法训练营第四十六天|KM52. 携带研究材料、518. 零钱兑换 II、377. 组合总和 Ⅳ。
2024-06-02 20:56:38 331
原创 代码随想录算法训练营第四十五天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零
将所有石头分成2组,两组的重量尽可能相等,差值最小。计算石头总重,再除以2就是目标重量,求要达到该重量能装的石头的最大价值(重量)。
2024-06-01 18:18:46 448
原创 代码随想录算法训练营第四十三天|343. 整数拆分、96.不同的二叉搜索树
【代码】代码随想录算法训练营第四十三天|343. 整数拆分、96.不同的二叉搜索树。
2024-05-29 23:38:32 292
原创 代码随想录算法训练营第四十一天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
【代码】代码随想录算法训练营第四十一天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。
2024-05-27 22:57:27 301
原创 代码随想录算法训练营第三十九天|738.单调递增的数字、968.监控二叉树、总结
找出局部最优并可以推出全局最优,就是贪心,贪心没有固定的解题模式。
2024-05-26 23:13:32 146
原创 代码随想录算法训练营第三十八天|435. 无重叠区间、763.划分字母区间、56. 合并区间
先排序,两个区间有重叠就删一个,要删右边界比较大的,保留右边界较小的。这样才能保证删除最少得区间。
2024-05-24 14:58:04 106
原创 代码随想录算法训练营第三十七天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
先从大到小排身高,身高相同预设人数小的在前,将数据源进行排序。在按照比自己高的人数将矮的人插入对应的位置。
2024-05-23 23:38:13 228
原创 代码随想录算法训练营第三十六天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
【代码】代码随想录算法训练营第三十六天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果。
2024-05-22 19:26:31 191
原创 代码随想录算法训练营第三十五天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
【代码】代码随想录算法训练营第三十五天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II。
2024-05-21 11:30:45 141
原创 代码随想录算法训练营第三十四天|455.分发饼干、376. 摆动序列、53. 最大子序和
【代码】代码随想录算法训练营第三十四天|455.分发饼干、376. 摆动序列、53. 最大子序和。
2024-05-20 23:02:50 102
原创 代码随想录算法训练营第三十二天|332.重新安排行程、51. N皇后、37. 解数独、总结
标准模板:void backtracking(参数) {if (终止条件) {//控制树形结构在哪一层收获结果,一般通过单层结果的元素数量控制将单层结果存放到结果集中;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表);// 递归回溯,撤销处理结果在单一数据源集合内取元素且数据源中没有重复元素void backtracking(数据源,startIndex) {
2024-05-19 21:17:40 964
原创 代码随想录算法训练营第三十一天|491.递增子序列 、46.全排列、47.全排列 II
【代码】代码随想录算法训练营第三十一天|491.递增子序列 、46.全排列、47.全排列 II。
2024-05-19 17:51:48 164
原创 代码随想录算法训练营第三十天|93.复原IP地址、78.子集、90.子集II
【代码】代码随想录算法训练营第三十天|93.复原IP地址、78.子集、90.子集II。
2024-05-18 22:43:49 119
原创 代码随想录算法训练营第二十九天|39. 组合总和、40.组合总和II、131.分割回文串
【代码】代码随想录算法训练营第二十九天|39. 组合总和、40.组合总和II、131.分割回文串。
2024-05-17 17:53:16 124
原创 代码随想录算法训练营第二十八天|216.组合总和III、17.电话号码的字母组合
【代码】代码随想录算法训练营第二十八天|216.组合总和III、17.电话号码的字母组合。
2024-05-16 22:25:07 106
原创 代码随想录算法训练营第二十五天|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结篇
二叉数的遍历分类:深度优先:前序(中左右)、中序(左中右)、后序(左右中)广度优先:层序遍历二叉树的属性:对称、最大深度、最小深度、子节点个数、平衡、遍历路径、左(右)叶子节点之和、左下角的值、路径总和。二叉树的构造:翻转、构造、构造最大、合并两个二叉树二叉搜索树的属性:搜索二叉搜索树中的节点、判断是不是二叉搜索树、二叉搜索树的最小绝对差、二叉搜索树的众数、二叉搜索树转累加树二叉树的公共祖先、二叉搜索树的公共祖先二叉搜索树的修改和构造:插入节点,删除节点、修剪树、构造树。
2024-05-14 18:58:44 284
原创 代码随想录算法训练营第二十四天|235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
从根节点向下搜索,如果当前节点数值大于p和q证明需要在左子树范围内搜索;如果当前节点数值都小于p和q,需要在整个右子树中寻找,找到在p和q之间的节点,就是最近的公共祖先节点。
2024-05-13 18:47:34 154 1
原创 代码随想录算法训练营第二十三天|530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
相邻两个节点相等计数器加1,计数大于最大值就更新最大值,然后把之前收集的结果清空,证明之前收集的结果是错的,计数等于最大值就把该节点的值加入结果集。
2024-05-09 23:35:46 141
原创 代码随想录算法训练营第二十二天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
找数组的最大值,最大值左侧是左子树,右侧是右子树。
2024-05-09 19:32:36 128
原创 代码随想录算法训练营第二十一天|513.找树左下角的值 、112. 路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
层序遍历找每层的第一个值。递归找叶子节点记录其深度,如果比先前记录的最大深度大就更新最大深度,同时获取该节点的值。先遍历左节点记录该值,遍历右节点时,深度与左节点相同所以不会更新结果和最大深度。
2024-05-09 16:23:26 277
原创 代码随想录算法训练营第二十天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
计算左右子树高度的差值如果大于1就不是平衡二叉树。想计算差值就得先算左右子树的高度,所以使用后序遍历。
2024-05-07 20:41:44 138 1
原创 代码随想录算法训练营第十九天|104.二叉树的最大深度 、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
适用后序变量,先深入左右,再处理中节点。
2024-05-06 18:23:36 182
原创 代码随想录算法训练营第十八天|二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
创建一个队列存储节点,循环内弹出节点时,将它的子节点同时加入队列,在每层循环之前记录队列内一层节点的数量,保证弹出的时候只弹出本层节点。外层循环控制层数,内层循环控制每个节点的弹出。
2024-05-05 19:44:34 241 2
原创 代码随想录算法训练营第十三天|239.滑动窗口最大值、347.前k个高频元素、总结
栈:先进先出,队列:先进后出优先级队列的大顶堆是left<right,小顶堆是left>right,与直觉相反。
2024-05-04 15:19:27 231
原创 代码随想录算法训练营第十一天|20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
因为字符串中只有括号,所以如果字符串的size是奇数,一定返回false。将3种左括号压入栈内,遇到3右括号就判断是否和栈顶的符合匹配。如果栈是空的遇到右括号就返回false。循环结束如果栈空了证明都匹配上了,返回true。
2024-04-29 15:55:57 187
原创 代码随想录算法训练营第十天|232.用栈实现队列 、225. 用队列实现栈
使用两个栈一个in_stack,一个out_stack。队列入队就将元素加入in_stack。出队,如果out_stack没有元素就将in_stack里的所有元素加入out_stack,否则不进行这个处理,最后返回out_stack的顶部元素再出栈。
2024-04-28 21:49:22 311
原创 代码随想录算法训练营第九天|28. 实现 strStr()、459. 重复的子字符串、字符串总结、双指针回顾
字符串的增删改查和数组相同,在内存中是连续存放的。活用双指针进行各种反转。要求空间复杂度为O(1),要提前扩容。
2024-04-28 01:01:54 404
原创 代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串
双指针交换两端的值然后指针向中间移动。
2024-04-25 21:59:26 300 1
原创 代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和、总结
在一个范围内寻找元素是否出现,出现过几次可以用哈希算法;查找范围的元素值如果在一个小范围内,比如字符串,[-1000,1000],可以用数组做哈希表;仅查找元素是否出现,且查找范围的元素比较大需要用set做哈希表;如果不光要查找元素是否出现,还要记录出现次数或者出现位置的时候就需要多一个维度的数据,用map中的key记录数据,value统计出现频次或记录下标;如果查找结果需要去重操作,最好将查找范围内的元素排序后使用双指针法处理。
2024-04-24 13:48:49 229
原创 代码随想录算法训练营第六天|242.有效的字母异位词、 349.两个数组的交集、202.快乐数、1. 两数之和
首先定义一个存储字母数量的哈希表(数组)。遍历词中的每个字母,计算字母在26个字母中的位置(下标),再在哈希表对应的位置+1。使用同样的方法计算另外一个词中所有字母所在的位置,在哈希表对应位置-1。最后如果哈希表中所有位置都为0,则说明这两个词是有效的字母异位词。
2024-04-23 18:21:37 183
原创 代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II 、 总结
链表在内存中是离散存在的,靠指针相连。指针(赋值)相等,并不会复制指针指向的内容,当指针里的内容被修改时指向同一个地址的两个指针变量都会被修改。
2024-04-21 22:37:08 314 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人