难度:Easy
解题思路:最开始用了两次for循环,报错TLE。后来想,遍历数组,走到某一元素时,假设之前有了最大值max和最小值min。如果此元素比min小,那么继续往后遍历,可能会出现最大收益,这时我们更新max和min;如果此元素比max大,那么此时出现了比之前最大收益更大的值,更新max和最大收益变量。一开始不要想边界问题,先处理主要矛盾。
代码如下:
1 | class Solution { |
运行结果:6ms,超过48.52%
此题是一个O(n)的动态规划问题,维护一个min_price、max_profit。
每次迭代:
max_profit = max(max_profit, prices[i]-min_price)
min_price = min(min_price,prices[i])
代码如下:
1 | class Solution { |
运行结果:9ms,超过15.20%
在此基础上还可以优化。维护一个min_price、max_price、max_profit。
每次迭代:
prices[i] > max_price时,更新max_price,查看是否产生更大收益。
prices[i] < min_price时,更新min_price和max_price。
代码如下:
1 | class Solution { |
运行结果:6ms,超过48.52%