题目:
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
限制:0 <= 数组长度 <= 10^5
解题思路:
- 首先肯定是一如既往的暴力模拟枚举,不过这道题暴力的过程中会发现有很重复计算,即去后面的数组里面寻找最大值,来计算最大的利润
- 所以就想到了直接创建一个数组temp,temp[i]表示从下标i开始的最大值,然后如果最大值比自己大,计算最大差距,ans存储最大差距。若比自己小则直接跳过。
代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 计算一个数组temp,temp[i]表示从下标i开始的最大值
# 然后如果最大值比自己大,计算最大差距,ans存储最大差距。
# 若比自己小则直接跳过
n = len(prices)
if n == 0 :
return 0
temp = [0] * n
max_temp = prices[n-1]
for i in range(n-1, -1, -1) :
if max_temp < prices[i] :
temp[i] = prices[i]
max_temp = prices[i]
else :
temp[i] = max_temp
ans = 0
for i in range(n) :
# 后面的最大值还小于自己本身,则后面相对来说都是下降,最大利润记为0
if temp[i] < prices[i] :
continue
else :
ans_temp = temp[i] - prices[i]
if ans < ans_temp :
ans = ans_temp
return ans