买卖股票的最佳时机—1:
题目:
假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。
如果你最多只允许完成一次交易,设计一个算法来找出最大利润。
解法:
该题解法和最大连续子数组和的解法思路是一样的。
1、根据股票的利益意义,想要更多利益则值低时买进,值高时卖出。根据提供的股票价格不方便得出股票价格变化,对原数据进行计算:list[i] - list[i-1] = 股票的变化。变化为正时股票增长(存在利益),变化为负时股票为下跌(无利益)。
2、得到股票的变化值列表,即求最大子数组和,最后得到正解。
代码:时间O(n),空间O(1)
# 算出利益比变化列表
NEW=[]
for i in range(len(list)-1):
NEW.append(list[i+1]-list[i])
# 初始化
imax = 0
temp = 0
# 最大子数组和计算方式
for d in NEW:
if temp + d > 0:
temp += d
else:
temp = 0
# 获取当前最大子数组
imax = max(temp,imax)
return imax```
https://blog.csdn.net/chenvast/article/details/78950392