leetcode121 best time buy and sell stock
意思就是說在一組數字裡,找到後出現的數減前面數的最大差值。
考慮兩種情況:
1. 陣列內的數不足兩位或為空,則返回0
2. 陣列內數大於2,就是我們要考慮的動態規劃問題了
建立一個動態陣列,用於儲存0~下標天內的最大差值
一個臨時數minprice記錄0~i下標天內出現的最小數
class Solution {
public int maxProfit(int[] prices) { if(prices == null || prices.length < 2) return 0; int[] dp = new int[prices.length]; int minprice = prices[0]; for(int i = 1 ; i < prices.length ; i++){ minprice = (minprice<prices[i]) ? minprice : prices[i]; dp[i] = Math.max(dp[i-1],prices[i]-minprice); } return dp[dp.length-1]; } }
有一種更省空間的寫法,不使用動態陣列儲存最大收益了,直接使用一個int整數即可,不過這對時間複雜度沒什麼影響。。
class Solution { public int maxProfit(int[] prices) { if(prices == null || prices.length < 2) return 0; // int[] dp = new int[prices.length]; int maxprofit = 0; int minprice = prices[0]; for(int i = 1 ; i < prices.length ; i++){ minprice = (minprice<prices[i]) ? minprice : prices[i]; maxprofit = Math.max(maxprofit,prices[i]-minprice); } return maxprofit; } }
試下來會發現每個動態規劃的問題都可以用降一維的方法處理哦~一維轉數字可能看不出來,但二維轉一維就可以省很多空間了