码迷,mamicode.com
首页 > 编程语言 > 详细

Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)

时间:2018-02-07 19:58:51      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:star   and   span   tar   fit   sel   got   str   source   

题目描述

已知一个数组,第i个元素表示第i天股票的价格,你只能进行一次交易(买卖各一次),设计算法找出最大收益

测试样例

Input: [7, 1, 5, 3, 6, 4]
Output: 5
最大收益 = 6-1 = 5 (不是7-1 = 6,因为先买后卖,7买,1买亏了6)


Input: [7, 6, 4, 3, 1]
Output: 0
最大收益为0

详细分析

初看非常简单,遍历数组,每次选择一个元素,找到这个元素后面的数组的最大值,计算差值,和当前最大收益比较即可,就像这样:
[7,1,5,3,6,4] 当前7,后面最大6,收益-1
[7,1,5,3,6,4] 当前1,后面最大6,收益5
[7,1,5,3,6,4] 当前5,后面最大6,收益1
如此继续找到即可。
不过这种方法会超时,稍微改变一下,现在不止保持最大收益,还保存最低价格,如果当天价格更低,就刷新最小价格(买),同时如果当天价格减去最小价格的收益最大,就刷新最大价格(卖),过程如下:

[7,1,5,3,6,4] minPrice=INT_MAX,maxProfit=0 => minPrice=7,maxProfit=0

[7,1,5,3,6,4] minPrice=7,maxProfit=0 => minPrice=1,maxProfit=0

[7,1,5,3,6,4] minPrice=1,maxProfit=0 => minPrice=1,maxProfit=4

[7,1,5,3,6,4] minPrice=1,maxProfit=4 => minPrice=1,maxProfit=4

[7,1,5,3,6,4] minPrice=1,maxProfit=4 => minPrice=1,maxProfit=5

[7,1,5,3,6,4] minPrice=1,maxProfit=5 => minPrice=1,maxProfit=5

算法实现

  • 方法1:Time Limit Exceeded

    class Solution {
    public:
    int maxProfit(vector<int>& prices) {
        int profit = 0;
        for(auto start=prices.begin();start!=prices.end();start++){
            int buy = *start;
            int sell = *std::max_element(start,prices.end());
            if((sell - buy)>profit){
                profit = sell-buy;
            }
        }
        return profit;
    }
    };
  • 方法2: Accepted

    class Solution{
    public:
    int maxProfit(vector<int> &prices){
        int profit = 0;
        int minBuy = std::numeric_limits<int>::max();
        for(int i=0;i<prices.size();i++){
            //buy it if current price is less than minimum prices yet
            if(prices[i]<minBuy){
                minBuy = prices[i];
            }
            //sell it if current profit got optimally
            if((prices[i]-minBuy)>profit){
                profit = prices[i]-minBuy;
            }
        }
        return profit;
    }
    };

Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)

标签:star   and   span   tar   fit   sel   got   str   source   

原文地址:https://www.cnblogs.com/racaljk/p/8427230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!