前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)

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

作者头像
racaljk
发布2018-08-31 10:54:18
4410
发布2018-08-31 10:54:18
举报
文章被收录于专栏:racaljkracaljk

题目描述

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

测试样例

代码语言:javascript
复制
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
代码语言:javascript
复制
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
代码语言:javascript
复制
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;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 测试样例
  • 详细分析
  • 算法实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档