## 题目描述：

LeetCode 714. Best Time to Buy and Sell Stock with Transaction Fee

Your are given an array of integers `prices`, for which the `i`-th element is the price of a given stock on day `i`; and a non-negative integer `fee` representing a transaction fee.

You may complete as many transactions as you like, but you need to pay the transaction fee for each transaction. You may not buy more than 1 share of a stock at a time (ie. you must sell the stock share before you buy again.)

Return the maximum profit you can make.

Example 1:

```Input: prices = [1, 3, 2, 8, 4, 9], fee = 2
Output: 8
Explanation: The maximum profit can be achieved by:
```

Note:

• `0 < prices.length <= 50000`.
• `0 < prices[i] < 50000`.
• `0 <= fee < 50000`.

## 解题思路：

```栈中保存交易序列[buy, sell]，当sell为0时表示还没有卖出

## Python代码：

``````class Solution(object):
def maxProfit(self, prices, fee):
"""
:type prices: List[int]
:type fee: int
:rtype: int
"""
ts = [[50000, 0]]
for price in prices:
if not ts[-1][1] and price <= ts[-1][0]:
ts[-1][0] = price
elif price >= max(ts[-1][1], ts[-1][0] + fee):
ts[-1][1] = price
elif ts[-1][1]:
ts.append([price, 0])
while len(ts) > 1 and ts[-2][1] < ts[-1][0] + fee:
ts[-1][1] = max(ts.pop()[1], ts[-1][1])
return sum(t[1] - t[0] - fee for t in ts if t[1] - t[0] > fee)
``````

Pingbacks已关闭。