摘要:
309.最佳买卖股票时机含冷冻期 要求:卖出之后有个一天的冷冻期,需要过了冷冻期才可以买 状态: 持有,卖 冷冻期,冷冻期后的不买 代码: 1 // 要求:冷冻期一天,取得最大利润 2 // 注意:持有状态中不含冷冻期,卖了之后紧接着会有个冷冻期 3 // 不持有里面包含着一个冷冻期,持有 卖 冷冻 阅读全文
摘要:
123.买卖股票的最佳时机III 要求:最多买卖两次股票,获得最大利润 思路: 分成四个状态 第一次买 卖, 第二次买 卖 代码 : 1 // 最多只能进行一笔交易 2 // 难点: 3 // 1,只能买卖两次 4 // 2,中间可能有空隙:一直不持有 5 // 6 // 持有:dp[i][0] 不 阅读全文
摘要:
121. 买卖股票的最佳时机 要求: [7,1,5,3,6,4]在里面找出合适的买入和卖出的时机 思路: 找到最小值和最大值,直接做差,但是需要保证顺序 贪心算法: 巧妙之处: 每一个节点都要比对是否是最小节点,然后跟最小节点进行相减,看是否是最大值 代码: int maxProfit(vector 阅读全文
摘要:
198.打家劫舍 要求: 给定一个nums,要求取得最大值,但是不可以选择两个相邻的数 dp定义: dp[n],取到第N个数字的时候,最大值 递推公式: 取:nums[i] + dp[j-2] 不取: nums[i-1]; 代码: 1 // 在两个数字不相邻的情况下,得到的最大金额 2 // 思路: 阅读全文
摘要:
139.单词拆分 要求: 有N个字母,一个字符串,看这个字符串是否由这个这些字母组成,注意,这些字母可以用无限次 思路: 无法得知背包的容量怎么设置,刚开始的思路是,让这些字母随意组成任意个字符串,然后查看是否满足 新思路: 从开始节点,到任意节点,查看是否满足N个字母,同时它的开始的地方要满足要求 阅读全文
摘要:
70. 爬楼梯 (进阶) 要求: 可以一下爬1-2个台阶,问爬到N阶的时候有多少种方法 公式1: nums[n] = nums[n-1]+nums[n-2]; 公式2: dp[n] +=dp[n-nums[i]]; 代码: 1 // 爬楼梯的问题:依次只能爬1 2,满足N时,它的排列有多少种 2 / 阅读全文
摘要:
完全背包 区别: 每种物品都是可以无线多个 代码: 1 // 多背包问题 2 // 有N个物品,他们的体积和重量如下,但是这些物品有无限个 3 // 需要发挥背包的最大容量,来让价值最大 4 // 5 // dp[n]: 当容量为N的时候,背包的价值最大是多少 6 // dp[n]: 7 // dp 阅读全文
摘要:
1049. 最后一块石头的重量 II 思路: 因为含有两个石头的相撞,所以需要把dp的目标值改成sum/2, 然后取得这个目标值的最大值,然后对sum-2*target 代码: 1 // 要求:有多个石头,两两撞击,取得剩下的石头的最小值 2 // ——》一定要碰到最后一个 3 // 注意: 4 / 阅读全文
摘要:
01背包问题 二维 要求: 有一个背包,他只能装4KG,分别有三个物品: 1 15;3 20; 4 30 ——》需要物品价值最大 dp[i][j] 含义: 在放物品I 的时候在J背包容量下的物品最大值 递推公式: 1,不放当前物品:dp[i-1][j]2,放当前物品:(dp[i-1][j]) ->不 阅读全文
摘要:
343. 整数拆分 要求: 将一个正数拆分成N个正整数,使得这N个正整数的乘机是最大的 思路: DP数组:dp[n] N 的时候,它的乘机最大值 注意: 不是i*dp[n-i]就是最大值,因为如果用dp就证明要开始拆分了,如果我不拆分,就是用的这两个数的话,那么就是单纯的 i* (n-i) 代码: 阅读全文