代码随想录算法训练营第五十天|309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 【代码】代码随想录算法训练营第五十天|309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费。
代码随想录算法训练营第四十九天|123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV 【代码】代码随想录算法训练营第四十九天|123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV。
代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 若果第i天不持有股票,则1.第i-1天就不持有股票,则dp[i-1][1];2.第i天卖出股票,所得现金就是prices[i]+d[i-1][0]如果第i天买入股票,则今天所得现金就是dp[i-1][1]-prices[i]与上一题不同的是,dp[i][0],第i天买入股票的情况。dp[i][0]表示第i天持有股票所得最多的现金。
代码随想录算法训练营第四十七天|198.打家劫舍 213.打家劫舍II 337.打家劫舍III 如果不偷当前节点:取左右孩子偷或不偷的最大值,int val2=max(left[0],left[1])+max(right[0],right[1]);如果偷当前节点:左右孩子不偷,int val1=cur->val+left[0]+right[0]但是递推公式dp[i]=max(dp[i-2]+nums[i],dp[i-1]);如果数组只有一个元素,dp[i]=nums[0];偷i:dp[i]=dp[i-2]+nums[i]dp[i]:i以内的房屋,偷的金额最大值。不偷i:dp[i]=dp[i-1];
代码随想录算法训练营第四十六天| 139.单词拆分 if[i,j]出现在字典里&&dp[j]为true,那么dp[i]为true。dp[0]=true;dp[i]:字符串长度为i,dp[i]为true;外层背包(字符串),内层物品(字典)
代码随想录算法训练营第四十五天|● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数 70. 爬楼梯 (进阶)解题方法1.dp数组及下标含义:dp[i]:爬i阶楼梯有dp[i]种方法2.递推公式:3.初始化dp[0]=1;dp[i]=0;i非04.确定遍历顺序外层背包,内层物品5.打印dp数组Code复杂度时间复杂度O(n*m),m:最多爬m个台阶,n总共有n阶台阶空间复杂度O(n)322. 零钱兑换解题方法1.dp数组及下标含义dp[i]:凑成总金额amount的最少的硬币个数2.确定递推公式:3.初始化:dp[0]=0;
代码随想录算法训练营第四十三天| ● 完全背包● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ 完全背包不限制物品个数,背包容量为j,求最大价值动规五部曲:1.dp数组及下标含义2.递推公式3.初始化4.确定遍历顺序:背包、物品的遍历顺序可以颠倒5.打印dp数组518. 零钱兑换 II解题方法1.dp数组及下标的含义:dp[j]:总金额为j的货币组合数为dp[j]2.确定递推公式:3.初始化:dp[0]=1;4.确定遍历顺序:组合数:外层物品内层背包排列数:外层背包内层物品5.打印dp数组Code复杂度。
代码随想录算法训练营第四十二天|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零 先遍历物品,再遍历背包,且内层for循环倒序遍历。1049. 最后一块石头的重量 II。dp[j]:背包容量为j,最大重量为dp[j]O(n*m),m为石头重量的一半,n为石头块数。dp[j]=0,避免把石头重量的最大值覆盖。5.距离推导dp数组。
代码随想录算法训练营第四十一天| 01背包问题 二维 01背包问题 一维 416. 分割等和子集 当j<weight[0],dp[0][j]=0;当j>=weight[0],dp[0][j]=value[0]dp[i][j]:表示从下标为0-i的物品里任意取,放进容量为j的背包,价值最大。dp[j]表示背包容量为j,最大价值为dp[j]dp[j]表示背包容量为j,最大价值为dp[j]廷尉题目要求“包含正整数”,将数组初始化为0。外层遍历物品,内层遍历背包,且内层是倒序遍历。外层遍历物品,内层遍历背包,且内层倒序遍历。若物品价值为负,dp数组初始化为负无穷。若物品价值>0,dp数组初始化为0。
代码随想录算法训练营第三十九天| 62.不同路径 63. 不同路径 II 1.确定dp[i][j]及下标的含义:dp[i][j]表示到达目的地的路径数,i表示行,j表示列。2.确定递推公式dp[i][j]=dp[i-1][j]+dp[i][j-1]dp[i][j]表示有dp[i][j]条不同路径。4.确定遍历顺序:从左往右遍历,从上往下遍历。4.确定遍历顺序:从上往下和从左向右遍历。3.dp数组初始化:当行或列不能遇到障碍。3.初始化:第一行和第一列。5.举例推导dp数组。5.举例推导dp数组。
代码随想录算法训练营第三十八天| 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 2.确定递推公式:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])1.确定dp[i]及下标含义:dp[i]表示爬楼梯的方法数,第i层楼梯。5.举例推导dp数组 n=5:1,2,3,5,8,dp[5]=8。2.确定递推公式dp[i]=dp[i-1]+dp[i-2];3.dp数组如何初始化 dp[1]=1;1.确定dp数组及下标含义:到达第i台阶所花费的体力是dp[i]dp[i]表示第i个数的斐波那契数值为dp[i]3.dp数组初始化:dp[0]=0;
代码随想录算法训练营第三十五天| 435. 无重叠区间 763.划分字母区间 56. 合并区间 再遍历一遍数组,用right和left代表分段的右左区间端点,取right和字母最远的边界的最大值更新right,如果right==i,那就找到了分割点。如果i的左端点>i+1的右端点,把区间的左端点更新为i和i+1左端点的最大值。遍历数组,如果i的右区间大于i-1的左区间,就没有重叠,需要更新左区间。遍历数组,如果i的右区间大于i-1的左区间,就没有重叠,需要更新左区间。先用哈希表遍历一遍数组,同时记录每个字母出现的次数。找到出现过字母的最远边界,该点就是分割点。判断何时更新区间的右端点。
代码随想录算法训练营第三十四天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球 第三种:bill=20,(优先考虑)若five>0&&ten>0,five--,ten--;若five>2,five-=3;三种情况,一种贪心,在bill为20时,有一次贪心选择:优先考虑先找10+5,再考虑找3*5,因为5可以用于bill=10和bill=20两种情况。bill=10,若five>0,five--,ten++;如果气球重叠了,更新i的右边界为i和i-1的右边界的最小值,如果没有,result++。先排身高,再排k,则从后往前插入时,就不需要再考虑身高,k值就插入到和数组下标相同的位置。
代码随想录算法训练营第三十三天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果 就一直对nums最小的那个正数取反,如果k是奇数,就直接把最小的数取反,如果是偶数,就不动。就一直对nums最小的那个正数取反,如果k是奇数,就直接把最小的数取反,如果是偶数,就不动。如果数组的净增量之和小于0,则无法循环一圈,如果大于0,当cursum<0时,将i+1作为新的起始点。第一次:先把数组按绝对值排序,对小于0的取反,然后k--,直到遍历完数组。第一次:先把数组按绝对值排序,对小于0的取反,然后k--,直到遍历完数组。左孩子>右孩子,所以需要用到右孩子的情况,所以这种情况下,从后往前遍历。
代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 如果当前最大范围覆盖到数组最后了,就break;如果没有,result++,更新当前范围为下一步范围,更新完之后,如果范围覆盖到数组最后,就break。贪心:以最小的步数,覆盖最大的范围。因此,需要统计当前最大范围和下一步最大范围。可将最终结果拆分成每天的利润相加之和。局部最优,nums[i]的覆盖范围。整体最优,整体覆盖范围能否达到终点。局部最优:每天的正利润。整体最优:正利润之和。贪心贪的是:覆盖范围。如果没有:break。
代码随想录算法训练营第三十一天| 455.分发饼干 376. 摆动序列53. 最大子序和 当连续和为负数时,会减小nums[i];把result初始值设为最小值,for循环,让count累加,如果count>result,就更新result值,如果count小于0,就把nums[i]做为起始位置。3.在for循环里,只记录prediff的峰值方向是否改变,不纠结值的大小是否改变。另外在for循环里,遍历饼干时,要用if,如果用while,若满足条件,则会一直循环。若先遍历饼干,饼干在for循环会一直做减减操作,导致饼干一直不满足胃口。2.假设最前面有一个和第一个元素相等的元素,假设有一个平坡。
代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列47.全排列 II 定义一个bool的used数组,来记录哪些元素已经取过了,避免重复取同一个元素。单层搜索逻辑:注意树层去重,同一父节点下的同层使用过的元素就不能再使用了。题目描述“包含重复数字”“不重复的全排列”,意思是要求去重。不需要设置startIndex来避免相等的元素重复取了。题目要求:“该数组中递增子序列”,所以不能排序。使用bool的used来避免取到值相同的元素。终止条件:当i>=nums.size()时。used来避免树层取到值相同的元素。参数:数组,遍历起始下标。