当前位置: 移动技术网 > IT编程>脚本编程>Python > 【leetcode】买卖股票的最佳时机 II【C、Python】

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

2018年05月28日  | 移动技术网IT编程  | 我要评论

湖北一夜情,异域修神,滕振国

题目:

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

 






如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网