返回
数组笔试题之买卖股票的最佳时机**
前端
2023-09-07 06:56:17
股票交易是一门技术活,考验着投资者的智慧和耐心。在瞬息万变的股市中,捕捉买卖时机至关重要。今天,我们就来解析一道经典的笔试题——数组笔试题之买卖股票的最佳时机 。
需求分析:
本题要求我们找到数组中买卖股票的最佳时机,以获取最大的利润。需要注意以下几点:
- 允许多次买卖股票。
- 每次买卖股票前必须先卖出已持有股票。
解题思路:
本题本质上是一个动态规划问题。我们可以定义一个二维数组dp
,其中dp[i][0]
表示在第i
天不持有股票所能获得的最大利润,dp[i][1]
表示在第i
天持有股票所能获得的最大利润。
根据题目条件,可以推导出状态转移方程:
dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i])
dp[i][1] = max(dp[i-1][1], -prices[i])
其中prices[i]
表示第i
天的股票价格。
步骤详解:
- 初始化:
dp[0][0] = 0
,dp[0][1] = -prices[0]
, 表示第一天不持有股票和持有股票所能获得的最大利润。 - 循环遍历数组中第
1
天到第n
天:- 计算第
i
天不持有股票所能获得的最大利润:dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i])
。 - 计算第
i
天持有股票所能获得的最大利润:dp[i][1] = max(dp[i-1][1], -prices[i])
。
- 计算第
- 返回第
n
天不持有股票所能获得的最大利润dp[n][0]
。
代码示例(Python):
def maxProfit(prices):
dp = [[0] * 2 for _ in range(len(prices) + 1)]
dp[0][0] = 0
dp[0][1] = -prices[0]
for i in range(1, len(prices) + 1):
dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i])
dp[i][1] = max(dp[i-1][1], -prices[i])
return dp[len(prices)][0]
示例输入:
prices = [7, 1, 5, 3, 6, 4]
示例输出:
7
结论:
通过使用动态规划的方法,我们可以有效解决买卖股票的最佳时机问题。理解状态转移方程和递归关系对于这类问题至关重要。掌握这些基本原理,将使你轻松应对各种股票交易相关的算法问题。