11 2022 档案
摘要:##123.买卖股票的最佳时机III 题目|文章 ####思路 相比于122.买卖股票的最佳时机III,这道题多了一道限制,就是买卖次数的限制,我的想法是通过增加一维来实现。文章中给出的方法则更加简单,将各种状态全部列出来,用二维数组就可以实现。 点击查看代码 class Solution { pu
阅读全文
摘要:##121. 买卖股票的最佳时机 题目|文章 ####思路 这道题可以用贪心算法和暴力解决,在此不讨论,只考虑动态规划的做法。 数组以及下标含义。 dp[i][0]:手上持有股票时所能得到的最大金额 dp[i][1]:手上没有持有股票时所能得到的最大金额 理解这个含义的关键在于,dp[j][0]只考
阅读全文
摘要:##198.打家劫舍 题目|文章 ####思路 数组以及下标含义 dp[j]:当偷到第j家时所能获得的最多的金钱 递推公式 dp[j] = max(dp[j - 1], dp[j - 2] + nums[i]) 当偷到第j家时,如果偷这家,那么就不能偷前一家,所能得到的最大金额为dp[j - 2]
阅读全文
摘要:##39.单词拆分 题目|文章 ####思路 数组以及下标含义 dp[i]:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。 递推关系 如果word出现在列表中,即[j,i]的子串出现在列表中,并且word之前的单词部分为true,那么这个子串为true 3.初
阅读全文
摘要:##70. 爬楼梯 题目|文章 ####思路 这道题目要求有序,因此是全背包的排列做法。 1.数组下标以及含义 dp[i]:爬到n台阶一共有dp[i]种方法。 2.递推关系 dp[i] += dp[i - j]; 3.初始化 dp[0]=1可以实现递推关系 4.遍历顺序 先遍历背包(n),再遍历物品
阅读全文
摘要:##完全背包 文章 ####思路 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 遍历
阅读全文
摘要:##1049. 最后一块石头的重量 II 题目|文章 ####思路 求剩余石头的最小重量。如果两个石头最接近总重量的平均值,那么剩余石头为最小重量。 所以先求出石头的总重量的一半。 1.数组以及下标的含义 dp[j]表示容量为j的背包,最多可以装重量为j的石头 2.确定递推公式 dp[j] = ma
阅读全文
摘要:##01背包问题 二维 文章 ####思路 本题没有特定的题目。有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 ####实现 dp数组及其含义 dp[i][j]表示背包的最
阅读全文
摘要:##343. 整数拆分 题目|文章 ####思路 一个动态规划问题最重要的就是找到递推公式,找到递推公式,整个题就已经解出来了。 这道题看到时会想分成几份比较好,等于10时与之前的数有什么关系。。。 确定数组及含义 dp[i]表示正整数等于i时所获得的最大乘积。 确定递推公式 dp[i-j]表示将i
阅读全文
摘要:##62. 不同路径 题目|文章 ####思路 这道题有二叉树,动态规划和数论三种解法,在此只讨论动态规划的解法。 确定动态数组及下标含义 这道题是m×n个位置,因此可以使用二维数组,第一个下标表示x位置,第二个下标表示y位置。 确定递推公式。 因为只能向下和向右移动,所以每个位置的路径等于上位置和
阅读全文
摘要:##509. 斐波那契数 题目|文章 ####思路 确实数组及其含义 确定递推公式 数组的初始化条件 确定遍历顺序 举例推导dp数组 ####实现 点击查看代码 class Solution { public: int fib(int n) { if(n <= 1) return n; vector
阅读全文
摘要:##435. 无重叠区间 题目|文章 ####思路 重叠区间题目的思路都是一样的,即先对左区间或者右区间进行排序,再去处理每个不重叠区间的边界问题。 按照左区间从小到大进行排序 当重叠时,更新右边界,结果加一 当不重叠时,同时更新左右边界 ####实现 点击查看代码 public: int eras
阅读全文
摘要:##860.柠檬水找零 题目|文章 ####思路 这道题看上去很复杂,其实只要把每种情况写下来,答案就已经解决了。 1.收到5 2.收到10 3.收到20 ####实现 点击查看代码 class Solution { public: bool lemonadeChange(vector<int>&
阅读全文
摘要:##1005.K次取反后最大化的数组和 题目|文章 ####思路 如何让翻转后的数组和最大,就是尽可能的反转绝对值大的负数。当反转次数多余时,不断反转绝对值最小的数。 首先将整个数组按照绝对值的大小从大到小排列 当有反转次数并且为负数时,反转负数 如果反转次数有剩余,那么反转绝对值最小的数,即排序后
阅读全文
摘要:##122.买卖股票的最佳时机II 题目|文章 ####思路 因为每天都可以将股票买入和卖出,因此,我们可以将买卖时机进行分解。 局部最优:如果当天的利润为正,则加入,如果当天利润为负,则不加入。 整体最优:所有天数的利润综合最大 ####实现 点击查看代码 class Solution { pub
阅读全文
摘要:##455.分发饼干 题目|文章 ####思路 满足能让最小胃口的孩子吃饱 首先对饼干和胃口值都进行排序 对饼干进行遍历,如果能满足当前孩子的胃口,那么就将结果加1。 ####实现 点击查看代码 class Solution { public: int findContentChildren(vec
阅读全文