摆烂几天,又来了。
R5-贪心篇(不像)
贪心的常规思路是找到贪心切入点,例如最经典的算法是安排最多活动问题,需要以结束时间排序,然后遍历不冲突,计算最大数即可(每次都选择最早结束的活动)。
贪心算法的使用需要满足贪心特征。即局部最优解等于全局最优解。
对于本题,
暴力算法思路:
利用哈希表记录每天买入能产生的最大利润值,该值通过两层循环遍历查找得到。
超时
class Solution:
def maxProfit(self, prices: List[int]) -> int:
dict=defaultdict(int)
for i in range(len(prices)):
for j in range(i,len(prices)):
if prices[j]-prices[i]>dict[i]:
dict[i]=prices[j]-prices[i]
return max(dict.values())
贪心??
包不是的呀
动态规划
动态规划点:从前i天价格最低的买入,卖出做单步的动态规划
动态规划公式:(当前规划需要与前面的规划产生联系)
前i天利润=max(选择第i天卖出-前i天的最低买入成本,选择前i天中的最高利润值)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
cost,profit=float('+inf'),0
for price in prices:
cost=min(cost,price)
profit=max(profit,price-cost)
return profit
下,理论上还有70+篇任务本月。