1. 程式人生 > >leetcode121 best time buy and sell stock

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;     } }

試下來會發現每個動態規劃的問題都可以用降一維的方法處理哦~一維轉數字可能看不出來,但二維轉一維就可以省很多空間了