# LeetCode:121. #交易一次 # 给定一个数组prices ,它的第i个元素prices[i] # 表示一支给定股票第i天的价格。 # # 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。 # 设计一个算法来计算你所能获取的最大利润。 # # 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0 。 # # # 示例1: # 输入:[7, 1, 5, 3, 6, 4] # 输出:5 # 解释:在第2天(股票价格 = 1)的时候买入,在第5天(股票价格 = 6)的时候卖出,最大利润 = 6 - 1 = 5 。 # 注意利润不能是7 - 1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。 # # 示例2: # 输入:prices = [7, 6, 4, 3, 1] # 输出:0 # 解释:在这种情况下, 没有交易完成, 所以最大利润为0。 # # 1.dp[i][0]第i天 持有股票的最大利润,dp[i][1]第i天 不持有股票的最大利润 # 2. 递推公式 dp[i][0] = max(dp[i-1][0],prices[i]) # dp[i][1] = max(dp[i-1][1],-prices[i]) # 3初始化 dp[0][0] = -prince[0] dp[0][1]=0 # 4.遍历顺序 # 5.打印dp prices = [7, 1, 5, 3, 6, 4] def get_most(prices): dp = [[0] * 2 for _ in range(len(prices))] dp[0][0] = - prices[0] # 第0天持有股票最大利润 dp[0][1] = 0 for i in range(1, len(prices)): dp[i][0] = max(dp[i - 1][0], 0-prices[i]) # 第i-1就持有 和 第i天买进 dp[i][1] = max(dp[i - 1][1], prices[i]+dp[i - 1][0]) print(dp) return max(dp[len(prices)-1][0], dp[len(prices)-1][1]) print(get_most(prices))