1. 程式人生 > >動態規劃-Best Time to Buy and Sell Stock

動態規劃-Best Time to Buy and Sell Stock

題目
Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Example 1:

Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:

Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.
--------------------- 


題意解讀:給定一個數組,陣列的第i個元素是第i天的股票價格。如果你只允許進行一次買賣操作(買和買當做一次交易),設計一個演算法尋找最大額收益
//d[i]代表[0,i]內交易股票的最大收益 minPrice表示[0,i)之間價格的最小值
//狀態轉移方程 dp[i] = max(dp[i-1],prices[i]-minPrice)

--------------------- 
作者:遇見更好的自己 
來源:CSDN 
原文:https://blog.csdn.net/yc1203968305/article/details/78173302 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

暴力解法
public class MSB {
    public static void main(String args[]){
        int nums[]=new int[]{7,1,5,3,6,4};   //測試邊界
        Solution test1=new Solution();
        System.out.println(test1.maxProfit(nums));
    }
}
class Solution {
    public int maxProfit(int[] prices) {
        int maxpfofit=0;
        for(int i=0;i<prices.length-1;i++){
            for(int  j=i+1;j<prices.length;j++){
                if(prices[j]>prices[i]){
                    maxpfofit=Math.max(maxpfofit,prices[j]-prices[i]);
                }
            }
        }
        return maxpfofit;
    }
}

動態規劃

class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length<2){
            return 0;
        }else{
            int minprice=prices[0];
            int res=0;
            for(int i=1;i<prices.length;i++){
                if(prices[i]>minprice){
                    res=Math.max(res,prices[i]-minprice);
                }else{
                    minprice=prices[i];
                }
            }
            if(res<=0){
                return 0;
            }else{
                return res;
            }
        }
    }
}