Leetcode 121. Best Time to Buy and Sell Stock

 昨晚和同学比赛做题,随机挑到了这题。说下我的思路

首先最先想到的是,从第一个数开始遍历,然后再从这个数的后面找出一个最大的数,当然相当于是循环套循环O(n2)的时间复杂度。

方法可行是可行,但是当数据变得很大的时候时间通不过。接着再想

比如当前已经有一个收益了,那么如何产生一个更大的收益,要素就是我的进价 更低,或者卖价更高。两者可以同时存在。

所以我们不妨这么想,当我们之前遍历的时候,遍历完第一个数以后 是不是下一次从第二个数开始遍历,然后第三个,第四个,但真的需要这样做吗

其实如果第二个数本身比第一个数大,那我们根本不用去在用它遍历一遍了,因为你的后面卖价都一样,进价贵了啊,收益小了。不会产生更大的收益

所以我第二个想法就是我记录当前进价,如果找到比它更小的数 就更新它,如果不比它小当然就是计算收益啊。

这里有一点 为什么我遇到比它小就更新它 而不是继续计算之后的数产生的收益。原因同上,因为你的卖价都一样,进价贵了啊,收益小了。

比如我现在是2,3,1,9

我现在是2 当我遇到 1 的时候 我就不需要再去计算1 和 2 收益 然后再去计算 9 和 2 产生的收益了。我直接计算1 和 9的收益就好了。

这样我就找到了一个可以遍历一次找到最大收益的方法了。说的实在是太啰嗦了

 

posted @ 2018-10-11 17:23  远途  阅读(82)  评论(0编辑  收藏  举报