欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【leetcode】买卖股票的最佳时机 II【C、Python】

程序员文章站 2022-07-02 13:57:23
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释 ......

题目:

给定一个数组,它的第 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。



题目分析:

简单题,不必赘述。
只强调笔者的思路要点:
首先需要一个标志记录当前股票的状态(下面代码中的flag,0代表空仓,1代表满仓)
其次需要记录买入价格和卖出价格(下面代码中的buy和sale)
最后卖出后算出所得利润(下面代码中的profit)
注意:防止一天交易两次(代码中的continue语句),最后一天要特殊处理。

解答代码:
Python:
 1 class Solution:
 2     def maxProfit(self, prices):
 3         """
 4         :type prices: List[int]
 5         :rtype: int
 6         """
 7         flag=0
 8         buy=0
 9         sale=0
10         profit=0
11         for i in range(0,len(prices)-1):
12             if flag==0 and prices[i]<prices[i+1]:
13                 buy=prices[i]
14                 flag=1
15                 continue
16             if flag==1 and prices[i]>prices[i+1]:
17                 sale=prices[i]
18                 flag=0
19                 profit=profit+(sale-buy)
20         if flag==1:
21             sale=prices[len(prices)-1]
22             profit=profit+(sale-buy)
23                 
24         return profit

C语言解答与Python解答代码大致相同,只是语法的区别,此处省略!