https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/?envType=study-plan-v2&envId=top-interview-150
思路
- 暴力解法,时间复杂度
- 遍历,假设在当天卖出(同时假设在当天之前的历史最低点买入,这个很好实现,遍历时存下来即可),找到利益最大的即可。时间复杂度
,上述解法空间复杂度都是 。
代码
代码很简单,就不需要伪代码了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public int maxProfit(int[] prices) { int minprice=prices[0]; int maxprofit=0; for(int i=1;i<prices.length;i++){ if(prices[i]<minprice)minprice=prices[i]; else if(prices[i]-minprice>maxprofit)maxprofit=prices[i]-minprice; } return maxprofit; } }
|
但是我提交之后,发现竟然还有比我快得多的??太怪了,赶紧去看。发现人家用了
Math 类实现大小比较与赋值,快得多,赶紧学习一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public int maxProfit(int[] prices) { int minprice=prices[0]; int maxprofit=0; int len=prices.length; for(int i=1;i<len;i++){ minprice=Math.min(minprice,prices[i]); maxprofit=Math.max(maxprofit,prices[i]-minprice); } return maxprofit; } }
|