当前位置: 面试刷题>> 买卖股票的最佳时机(经典算法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 示例代码

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 示例代码

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 示例代码

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

总结

这些示例代码通过遍历股票价格数组,在每一天都检查是否比前一天的价格高,如果是,则累加利润。这种方法简单且高效,适用于多次买卖股票的情况。通过码小课网站,你可以学习到更多关于算法和数据结构的知识,以帮助你更好地应对面试和日常编程挑战。

推荐面试题