当前位置: 面试刷题>> 买卖股票的最佳时机(经典算法150题)
### 题目描述
给定一个数组,它的第 `i` 个元素是一支给定股票第 `i` 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
**注意**:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
### 示例
**示例 1**:
```
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第2天(股票价格=1)的时候买入,在第3天(股票价格=5)的时候卖出, 这笔交易所能获取利润=5-1=4 。
随后,在第4天(股票价格=3)的时候买入,在第5天(股票价格=6)的时候卖出, 这笔交易所能获取利润=6-3=3 。
```
**示例 2**:
```
输入: [1,2,3,4,5]
输出: 4
解释: 在第1天(股票价格=1)的时候买入,在第5天 (股票价格=5)的时候卖出, 这笔交易所能获取利润=5-1=4 。
注意你不能在第1天和第2天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
```
**示例 3**:
```
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
```
### PHP 示例代码
```php
function maxProfit($prices) {
$maxProfit = 0;
$length = count($prices);
for ($i = 1; $i < $length; $i++) {
if ($prices[$i] > $prices[$i - 1]) {
$maxProfit += $prices[$i] - $prices[$i - 1];
}
}
return $maxProfit;
}
// 示例
$prices = [7,1,5,3,6,4];
echo maxProfit($prices); // 输出 7
```
### Python 示例代码
```python
def maxProfit(prices):
max_profit = 0
for i in range(1, len(prices)):
if prices[i] > prices[i - 1]:
max_profit += prices[i] - prices[i - 1]
return max_profit
# 示例
prices = [7,1,5,3,6,4]
print(maxProfit(prices)) # 输出 7
```
### JavaScript 示例代码
```javascript
function maxProfit(prices) {
let maxProfit = 0;
for (let i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
maxProfit += prices[i] - prices[i - 1];
}
}
return maxProfit;
}
// 示例
const prices = [7,1,5,3,6,4];
console.log(maxProfit(prices)); // 输出 7
```
### 总结
这些示例代码通过遍历股票价格数组,在每一天都检查是否比前一天的价格高,如果是,则累加利润。这种方法简单且高效,适用于多次买卖股票的情况。通过码小课网站,你可以学习到更多关于算法和数据结构的知识,以帮助你更好地应对面试和日常编程挑战。