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

2018-06-18 03:07:04来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

题目:

给定一个数组,它的第 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解答代码大致相同,只是语法的区别,此处省略!

 






标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:GIL(全局解释器锁)

下一篇:Python3基础之异常结构