@H_403_1@这是一个算法问题,其主题是:
最佳买卖时机 @H_403_1@假设您有一个数组,其中第i个元素是第i天给定股票的价格.
如果您只被允许完成最多一笔交易(即买入并卖出一股股票),请设计一个算法来查找最大利润. @H_403_1@*例1:
输入:[7,1,5,3,6,4]
输出:5 @H_403_1@最大.差异= 6-1 = 5(不是7-1 = 6,因为售价需要大于购买价格).* @H_403_1@*例2:
输入:[7,4,1]
输出:0 @H_403_1@在这种情况下,不进行任何交易,即最大利润= 0.* @H_403_1@我使用python进行了解决.代码如下: @H_403_1@
Return wrong @H_403_1@试过但我无法弄清楚错误在哪里……有人可以帮忙吗?非常感谢!
最佳买卖时机 @H_403_1@假设您有一个数组,其中第i个元素是第i天给定股票的价格.
如果您只被允许完成最多一笔交易(即买入并卖出一股股票),请设计一个算法来查找最大利润. @H_403_1@*例1:
输入:[7,1,5,3,6,4]
输出:5 @H_403_1@最大.差异= 6-1 = 5(不是7-1 = 6,因为售价需要大于购买价格).* @H_403_1@*例2:
输入:[7,4,1]
输出:0 @H_403_1@在这种情况下,不进行任何交易,即最大利润= 0.* @H_403_1@我使用python进行了解决.代码如下: @H_403_1@
class Solution(object):
def maxProfit(self,prices):
"""
:type prices: List[int]
:rtype: int
"""
i=Max=0
if not prices:
return 0
while i+1 <= len(prices)-1:
j=i+1
while j < len(prices):
if prices[i] < prices[j]:
Max = max(Max,prices[j] - prices[i])
j+=1
j+=1
i+=1
return Max
@H_403_1@然而,系统让我觉得我错了:Return wrong @H_403_1@试过但我无法弄清楚错误在哪里……有人可以帮忙吗?非常感谢!
最佳答案
干得好!尽管可能会对代码进行一些改进,但让我们关注导致它返回错误结果的一个错误:
@H_403_1@
> For循环比while循环更容易阅读,并且性能稍好一些.当只有一个计数器需要增加时使用它们: @H_403_1@
Max = max(Max,prices[j] - prices[i])
j+=1
j+=1
@H_403_1@它是双j = 1.每当最大值改变时,j增加两次,跳过一些比较.
@H_403_1@删除if-branch中的j = 1,您将获得输入向量的正确结果:
@H_403_1@
Max = max(Max,prices[j] - prices[i])
j+=1
@H_403_1@如果有兴趣,这里有一些改进编码风格的技巧:
@H_403_1@>而i 1< = len(价格)-1:加1并使用< =是多余的.而我< len(价格)-1:稍微清洁一点.> For循环比while循环更容易阅读,并且性能稍好一些.当只有一个计数器需要增加时使用它们: @H_403_1@
for i in range(len(prices)):
for j in range(i,len(prices)):
if prices[i] < prices[j]:
Max = max(Max,prices[j] - prices[i])
@H_403_1@>在这种情况下无需使用类.