[LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间

16人阅读 评论(0) 收藏 举报
分类:

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.
买卖股票的最佳时间
与此题一样

最大差值 - CSDN博客
https://blog.csdn.net/coolwriter/article/details/79975775

有一个长为n的数组A,求满足0a≤b<n的A[b]-A[a]的最大值。
给定数组A及它的大小n,请返回最大差值。
测试样例:
[10,5],2
返回:0

1.一次交易卖买

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res = 0, buy = INT_MAX;
        for (int price : prices) {
            buy = min(buy, price);
            res = max(res, price - buy);
        }
        return res;
    }
};

2. 无限次交易买卖,必须是一次交易结束了,再进行下一次交易,

这道题由于可以无限次买入和卖出。我们都知道炒股想挣钱当然是低价买入高价抛出,那么这里我们只需要从第二天开始,如果当前价格比之前价格高,则把差值加入利润中,因为我们可以昨天买入,今日卖出,若明日价更高的话,还可以今日买入,明日再抛出

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res = 0, n = prices.size();
        for (int i = 0; i < n - 1; ++i) {
         //res+= prices[i] - prices[i-1] >0 ? prices[i] - prices[i-1] :0 ;  
            if (prices[i] < prices[i + 1]) 
            {
                res += prices[i + 1] - prices[i];
            }
        }
        return res;
    }
};

3.最多允许两次交易,但必须是一次交易结束了,再进行下一次交易

给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100

思路:

题目要求计算两次交易机会所获收益最大值,则可以先正序遍历一遍记录第k天时第一次交易可以获得的最大收益,然后再后序遍历一次,记录第k天时后面有第二次交易可获的最大收益。再将第k天的两次交易最大值相加比较即可获得结果。注意,正序遍历时表示在第k天之前可以获得的最大收益,后序遍历表示第k天后面可以获得的最大收益。

class Solution {  
public:  
    /** 
     * 计算你能获得的最大收益 
     *  
     * @param prices Prices[i]即第i天的股价 
     * @return 整型 
     */  
    int calculateMax(vector<int> prices) {  
        int len = prices.size();  
        vector<int> leftmax(n);  
        vector<int> rightmax(n);  

        //正序遍历  
        int primin = prices[0];  
        leftmax[0] = 0;  
        for(int i=1;i<len;++i){  
            primin = min(primin, prices[i]);  
            leftmax[i] = max(leftmax[i-1], prices[i] - primin);  
        }  

        //后序遍历  
        int primax = prices[len-1];  
        rightmax[len-1] = 0;  
        for(int i=len-2;i>=0;--i){  
            primax = max(primax, prices[i]);  
            rightmax[i] = max(rightmax[i+1], primax - prices[i]);  
        }  

        int pmax = 0;  
        for(int i=0;i<len;++i)  
            pmax = max(pmax, leftmax[i] + rightmax[i]);  
        return pmax;  

    }  
};
查看评论

--=== 利用微软网格控件进行编辑输入==--

利用微软网格控件进行编辑输入(作者:王莉梅 2001年01月18日 16:51)  Visual Basic中提供了许多标准控件和定制控件,每一个控件都可以提供一组特殊的用户界面和编程能力。充分利用每...
  • coolstar
  • coolstar
  • 2001-05-04 17:31:00
  • 1608

【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】

【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Say you have a...
  • DERRANTCM
  • DERRANTCM
  • 2015-08-14 06:16:32
  • 7976

Leetcode 123 Best Time to Buy and Sell Stock III 至多两次买卖股票最大收益

假设你有一个数组,里面记录的是每一天的股票的价格。 设计一个算法来计算最大收益。你至多可以完成两次交易...
  • smile_watermelon
  • smile_watermelon
  • 2015-07-08 23:23:09
  • 3465

Leetcode 188 Best Time to Buy and Sell Stock IV 至多k次买卖股票最大收益

假设你有一个数组,里面记录的是每一天的股票的价格。设计一个算法来计算最大收益。你至多可以完成k次交易。你不能同时进行多次交易(即,在你买入股票之前必须卖掉手里的股票)。...
  • smile_watermelon
  • smile_watermelon
  • 2015-08-12 15:50:41
  • 1031

[leetcode 309]Best Time to Buy and Sell Stock with Cooldown--买卖股票with冷却期(DP法)

Question: Say you have an array for which the ith element is the price of a given stock on day ...
  • Xiaohei00000
  • Xiaohei00000
  • 2016-03-10 23:02:33
  • 2029

leetcode【121+122+123 best time to buy and sell stock】【python】

我们先拿出来前三道题,因为他们都是array中的题目。这是leetcode种经典的一系列题,涉及到动态规划和贪心算法。按照我的理解,贪心是满足当前条件的最优值我们就将它最为最优解,也就是大家说的局部最...
  • u014251967
  • u014251967
  • 2016-09-12 21:04:35
  • 1160

【LeetCode】 Best Time to Buy and Sell Stock I II III IV 解题报告

Best Time to Buy and Sell Stock I题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。 如果只允许进行一次交易,也就是说只允许买一支股票并卖掉,求...
  • ljiabin
  • ljiabin
  • 2015-04-06 11:10:34
  • 22539

【LeetCode】【Python题解】Best Time to Buy and Sell Stock II

Say you have an array for which the ith element is the price of a given stock on day i. Design an...
  • u011613729
  • u011613729
  • 2014-07-24 10:11:44
  • 3577

Best Time to Buy and Sell Stock III 最佳时间买入卖出股票(最多两次买卖)@LeetCode

直到要用DP做,但是一开始思路是错的。后来参考了 http://blog.csdn.net/pickless/article/details/12034365 才意识到可以在整个区间的每一点切开,然后...
  • hellobinfeng
  • hellobinfeng
  • 2013-11-08 00:34:31
  • 21011

[LeetCode] Best Time to Buy and Sell Stock IV

Say you have an array for which the ithi^{th} element is the price of a given stock on day ii.Design...
  • u011331383
  • u011331383
  • 2015-02-23 00:08:34
  • 8938
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 3315
    排名: 1万+
    最新评论