模版题-动态规划-买卖股票的最佳时机IV ( 多状态 多维数组简化 )
```python class Solution: # 一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。 # 设计一个算法来计算所能获取的最大利润。最多可以完成 k 笔交易。也就是说,最多可以买 k 次,卖 k 次
```python class Solution: # 一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。 # 设计一个算法来计算所能获取的最大利润。最多可以完成 k 笔交易。也就是说,最多可以买 k 次,卖 k 次
```python class Solution: # 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 # 设计一个算法来计算你所能获取的最大利润。最多可以完成两笔交易。 # 注意:不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)
**买卖股票的最佳时机I中,由于只允许买卖股票一次,所以收益不可以复用。** 体现在递推公式上: ``` for i in range( 1, n ): dp[ i ][ 0 ] = max( dp[ i - 1 ][ 0 ], dp[ i - 1 ][ 1 ] + prices[
## 双指针 ```python class Solution: def maxProfit(self, prices: List[int]) -> int: # 第i天卖出, ( 0 ~ i-1 )天最便宜时买入 n = len( pric
```python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = va
```python class Solution: def rob(self, nums: List[int]) -> int: # 所有的房屋都围成一圈, # 这意味着第一个房屋和最后一个房屋是紧挨着的。 # 那么实际影响能否偷
**每间房屋2种状态: 偷 or 不偷** **一夜内能偷取到到的最大金额 —— 暴力求解:列出每个房屋的偷取情况,取其中最大的。** **这种枚举特征,很显然可以用动态规划优化掉。** ```python class Solution: # 你是一个专业的小偷,计划偷窃沿
**形如用物品装满背包的问题,优先考虑背包问题。** 物品可以是数字,可以是字符串;背包可以是容量,也可以是字符串。 总之,形如用某物填充/装满某物的问题,优先考虑背包解决。 ```python class Solution: def wordBreak(self, s: st
```python class Solution: # 一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 # 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
```python class Solution: # 一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 # 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 def co