标签:不用 开始 第一个 方法 如何 技术 etc 记录 而不是
昨晚和同学比赛做题,随机挑到了这题。说下我的思路
首先最先想到的是,从第一个数开始遍历,然后再从这个数的后面找出一个最大的数,当然相当于是循环套循环O(n2)的时间复杂度。
方法可行是可行,但是当数据变得很大的时候时间通不过。接着再想
比如当前已经有一个收益了,那么如何产生一个更大的收益,要素就是我的进价 更低,或者卖价更高。两者可以同时存在。
所以我们不妨这么想,当我们之前遍历的时候,遍历完第一个数以后 是不是下一次从第二个数开始遍历,然后第三个,第四个,但真的需要这样做吗
其实如果第二个数本身比第一个数大,那我们根本不用去在用它遍历一遍了,因为你的后面卖价都一样,进价贵了啊,收益小了。不会产生更大的收益
所以我第二个想法就是我记录当前进价,如果找到比它更小的数 就更新它,如果不比它小当然就是计算收益啊。
这里有一点 为什么我遇到比它小就更新它 而不是继续计算之后的数产生的收益。原因同上,因为你的卖价都一样,进价贵了啊,收益小了。
比如我现在是2,3,1,9
我现在是2 当我遇到 1 的时候 我就不需要再去计算1 和 2 收益 然后再去计算 9 和 2 产生的收益了。我直接计算1 和 9的收益就好了。
这样我就找到了一个可以遍历一次找到最大收益的方法了。说的实在是太啰嗦了
Leetcode 121. Best Time to Buy and Sell Stock
标签:不用 开始 第一个 方法 如何 技术 etc 记录 而不是
原文地址:https://www.cnblogs.com/winder-knight/p/9773757.html