Skip to content

Commit bc93d28

Browse files
committed
Add Solution.py for 0188.Best Time to Buy and Sell Stock IV
1 parent be45db2 commit bc93d28

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## 买卖股票的最佳时机 IV
2+
3+
### 问题描述
4+
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
5+
6+
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
7+
8+
注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
9+
10+
示例 1:
11+
```
12+
输入: [2,4,1], k = 2
13+
输出: 2
14+
解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。
15+
```
16+
17+
示例 2:
18+
```
19+
输入: [3,2,6,5,0,3], k = 2
20+
输出: 7
21+
解释: 在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。
22+
  随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。
23+
```
24+
25+
-------------
26+
### 思路:
27+
28+
以解决DP问题的方式处理此问题, 涉及股票天数, 交易次数, 交易内容(买入OR卖出)三个元素, 枚举这三种元素叠加产生的所有情况, 不断
29+
在每一个选择之后保证最优解, 最后我们看最后一天股票, 经历最大交易次数后, 并且状态是卖出时所得的收益即为最大收益;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution:
2+
def maxProfit(self, k: int, prices: List[int]) -> int:
3+
length = len(prices)
4+
if 0 == length:
5+
return 0
6+
if k > (length / 2):
7+
maxprofit = 0
8+
for i in range(0, len(prices) - 1, 1):
9+
if prices[i + 1] > prices[i]:
10+
maxprofit += prices[i + 1] - prices[i]
11+
return maxprofit
12+
m = k
13+
n = length
14+
dp = [[([0] * (2)) for i in range(m + 1)] for i in range(n + 1)]
15+
minNumber = -((1 << 31) - 1)
16+
for x in range(0, n + 1, 1):
17+
dp[x][0][0] = 0
18+
dp[x][0][1] = minNumber
19+
for y in range(1, m + 1, 1):
20+
dp[0][y][0] = 0
21+
dp[0][y][1] = minNumber
22+
for i in range(1, m + 1, 1):
23+
for j in range(1, length + 1, 1):
24+
dp[j][i][0] = max(dp[j - 1][i][0], dp[j - 1]
25+
[i][1] + prices[j - 1])
26+
dp[j][i][1] = max(dp[j - 1][i][1], dp[j - 1]
27+
[i - 1][0] - prices[j - 1])
28+
return dp[n][m][0]

solution/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,9 @@
625625
│   └── README.md
626626
├── 0184.Department Highest Salary
627627
│   └── README.md
628+
├── 0188.Best Time to Buy and Sell Stock IV
629+
│   ├── README.md
630+
│   └── Solution.py
628631
├── 0189.Rotate Array
629632
│   ├── README.md
630633
│   └── Solution.java

0 commit comments

Comments
 (0)