[LeetCode] 121. 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 (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Note that you cannot sell a stock before you buy one.

Example 1:

Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 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
Explanation: In this case, no transaction is done, i.e. max profit = 0.

求解购抛股票的最大收益。使用动态规划进行求解。
全局最优解是局部最优解的最优解。
局部最优解当前局部最优解和后边的正收益的加和。当局部最优解值为负,说明当前值为最低买入值,恢复局部最优初始值0.
每前进一位,就比较更新一遍全局最优解。

代码如下:
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit=0,temp=0;
        for(int i=1;i<prices.size();++i){
            temp=max(temp+prices[i]-prices[i-1],0);
            profit=max(profit,temp);
        }
        return profit;
    }
};

 

posted @ 2019-06-26 11:20  程嘿嘿  阅读(117)  评论(0编辑  收藏  举报