Leetcode 买卖股票的最佳时机

Day4

题目

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

Leetcode 买卖股票的最佳时机_第1张图片
顺带一提,这题的测试用例的数组元素竟然有0…意思能白嫖股票是吧。

思路一:经典暴力遍历(除了暴力我还会啥?)。没啥好说的,把第一个和每一个做差,值返回和max做比较,如果比max大,就赋值给max。如果比max小,那还是返回max。最后把遍历结束,返回max。
Leetcode 买卖股票的最佳时机_第2张图片
时间复杂度O(n方),结果不出所料,超时了 = =。
在这里插入图片描述
看来也不是什么题都能暴力解决。。。。

思路二:通过观察不难发现,想要利润最大,买入的那天它虽然不是整个数组最小的,但在它之前一定没有比它小的。同理,卖出去的那天虽然不是整个数组中最大的,但在它之后一定没有比它大的。所以这次我们可以设置一个变量,记录遇到的最小值,同时,记录一个变量,记录当前最小值和后续的元素之差。最后返回这个变量。
Leetcode 买卖股票的最佳时机_第3张图片
时间复杂度应该是O(n)。
在这里插入图片描述
然后。。。水平有限。想不出0ms的方法。看评论区说要用动态规划。这是什么 = =,看名字就很厉害。先跳过,后续如果学会了再来补这个坑。

你可能感兴趣的:(java,leetcode)