贪心算法
无手续费多次买卖股票,最大利润
- 只能卖出后再买入,不能同时多次交易
- 贪心算法解决:
// 买卖股票获取最大利润,可多次买卖操作 func profitFromStock(nums []int) int { var result int for i := 1; i < len(nums); i++ { // 分解总利润,每一天的正利润相加即为总利润 if nums[i]-nums[i-1] > 0 { result += nums[i] - nums[i-1] } } return result }
- 动态规划解决:
func profitFromStockII(nums []int) int { // dp[i][]表示剩余金钱, 第i天有两种状态,买入(持有)0,卖出1 dp := make([][]int, len(nums)) for i, _ := range dp { dp[i] = make([]int, 2) } // dp[0][0] = -nums[0] // dp[i][0] = max(dp[i-1][1]-nums[i], dp[i-1][0]), // 若当天买入,则意味着之前已经卖出,或处于卖出后状态 // dp[i][1] = max(dp[i-1][0]+nums[i], dp[i-1][1]), // 若当天卖出,则之前已经买入,或处于买入的持有状态 for i := 1; i < len(nums); i++