LeetCode-探索-初级算法-动态规划-2. 买卖股票的最佳时机(个人做题记录,不是习题讲解)
LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/
- 买卖股票的最佳时机
-
语言:java
-
思路:和之前数组的买卖股票题目那个有点像,不过这个是只能进行一次交易。那么也求每个之间的差值,寻找一个差值相加后 > 0的最大值,就是最大利润。
-
代码(1ms):
class Solution { public int maxProfit(int[] prices) { int sum = 0; int max = 0; int diff = 0; for(int i = 1; i < prices.length; ++i){ diff = prices[i] - prices[i-1]; if(sum + diff > 0) sum += diff; else sum = 0; max = max > sum ? max : sum; } return max; } }
-
参考代码(0ms):即遍历一次,遍历中,要是min比当前小,则考虑更换最小值;反之,比min大,则考虑当前与min的插值是不是所需的最大利润
class Solution { public int maxProfit(int[] prices) { int max = 0; int min = Integer.MAX_VALUE; for (int price : prices) { if (min > price) { min = price; } else if (price - min > max) { max = price - min; } } return max; } }
-
参考后重写(1ms):慢了估计涉及优化问题。暂不考虑。
class Solution { public int maxProfit(int[] prices) { int max = 0; int min = Integer.MAX_VALUE; for(int i = 0; i < prices.length; ++i){ if(min > prices[i]){ min = prices[i]; }else{ int tmp = prices[i] - min; if(tmp > max) max = tmp; } } return max; } }