96 lines
2.5 KiB
Markdown
96 lines
2.5 KiB
Markdown
|
|
|||
|
## 题目地址
|
|||
|
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/description/
|
|||
|
|
|||
|
## 题目描述
|
|||
|
|
|||
|
```
|
|||
|
Say you have an array for which the ith element is the price of a given stock on day i.
|
|||
|
|
|||
|
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times).
|
|||
|
|
|||
|
Note: You may not engage in multiple transactions at the same time (i.e., you must sell the stock before you buy again).
|
|||
|
|
|||
|
Example 1:
|
|||
|
|
|||
|
Input: [7,1,5,3,6,4]
|
|||
|
Output: 7
|
|||
|
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
|
|||
|
Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
|
|||
|
Example 2:
|
|||
|
|
|||
|
Input: [1,2,3,4,5]
|
|||
|
Output: 4
|
|||
|
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
|
|||
|
Note that you cannot buy on day 1, buy on day 2 and sell them later, as you are
|
|||
|
engaging multiple transactions at the same time. You must sell before buying again.
|
|||
|
Example 3:
|
|||
|
|
|||
|
Input: [7,6,4,3,1]
|
|||
|
Output: 0
|
|||
|
Explanation: In this case, no transaction is done, i.e. max profit = 0.
|
|||
|
```
|
|||
|
|
|||
|
## 思路
|
|||
|
|
|||
|
由于我们是想获取到最大的利润,我们的策略应该是低点买入,高点卖出。
|
|||
|
|
|||
|
由于题目对于交易次数没有限制,因此只要能够赚钱的机会我们都不应该放过。
|
|||
|
|
|||
|
> 如下图,我们只需要求出加粗部分的总和即可
|
|||
|
|
|||
|
用图表示的话就是这样:
|
|||
|
|
|||
|
![122.best-time-to-buy-and-sell-stock-ii](../assets/problems/122.best-time-to-buy-and-sell-stock-ii.png)
|
|||
|
|
|||
|
## 关键点解析
|
|||
|
|
|||
|
- 这类题只要你在心中(或者别的地方)画出上面这种图就很容易解决
|
|||
|
|
|||
|
## 代码
|
|||
|
|
|||
|
语言支持:JS,Python
|
|||
|
|
|||
|
JS Code:
|
|||
|
|
|||
|
```js
|
|||
|
/**
|
|||
|
* @param {number[]} prices
|
|||
|
* @return {number}
|
|||
|
*/
|
|||
|
var maxProfit = function(prices) {
|
|||
|
let profit = 0;
|
|||
|
|
|||
|
for(let i = 1; i < prices.length; i++) {
|
|||
|
if (prices[i] > prices[i -1]) {
|
|||
|
profit = profit + prices[i] - prices[i - 1];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return profit;
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Python Code:
|
|||
|
|
|||
|
```python
|
|||
|
class Solution:
|
|||
|
def maxProfit(self, prices: 'List[int]') -> int:
|
|||
|
gains = [prices[i] - prices[i-1] for i in range(1, len(prices))
|
|||
|
if prices[i] - prices[i-1] > 0]
|
|||
|
return sum(gains)
|
|||
|
#评论区里都讲这是一道开玩笑的送分题.
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
## 相关题目
|
|||
|
|
|||
|
- [121.best-time-to-buy-and-sell-stock](./121.best-time-to-buy-and-sell-stock.md)
|
|||
|
- [309.best-time-to-buy-and-sell-stock-with-cooldown](./309.best-time-to-buy-and-sell-stock-with-cooldown.md)
|
|||
|
|