Leetcode 122 Best Time to Buy and Sell Stock II 不限次数买卖股票最大收益

原创 2015年07月08日 22:51:15

原题地址

https://leetcode.com/problems/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 algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
设计一个算法来计算最大收益。你可以完成任意次数的交易(即,买买股票多次)。但是你不能同时进行多次交易(即,在你买入股票之前必须卖掉手里的股票)。

解题思路

这个跟121题是同一个系列 Leetcode 121 Best Time to Buy and Sell Stock 单次买卖股票最大收益。一拿到这个题目的时候,我想到的是动态规划,结果TLE,于是我开始重新看这个题。说实话,真的看不出来,于是从网上搜了一下,原来答案如此简单。用贪心非常好做。但是我发现,贪心算法可以解决的问题,都很难去发现他是一个贪心,当知道答案后又觉得,原来这么简单。还是得加强啊。

我们可以很自然的这么想,只要后面一天的价格比前一天高,那么我们一定可以将这个差价转化为收益。这样问题变得简单起来,从第二天开始往后遍历,比较其于前一天的价格,只要后面价格大于前面一天的价格,就把差价加到收益里去。特殊的,对于[1,2,3]这组数据,我们的最大收益为1+1=2,即第一天买入,第二天卖出,收入+1,第二天买入,第三题卖出,收入+1;第二天买入卖出抵消,就相当于第一天买入,第三题卖出,收入为3-1=2。

算法描述

  1. profit = 0
  2. 从第2天开始遍历,判定当天价格是否大于前一天价格,若是,则将差价加到profit上,否则继续判定下一天,直到最后一天
  3. 返回profit

代码 C

/**
 * 计算最大收益
 * @param prices : 每天的股票价格
 * @param pricesSize : 数据规模
 * @return : 最大收益
 * @note : 可以买卖多次
 */
int maxProfit(int* prices, int pricesSize) {
    if (pricesSize <= 1) return 0;

    int max = 0, day;
    for (day = 1; day < pricesSize; ++day)
        if (*(prices + day) > *(prices + day - 1))
        max += *(prices + day) - *(prices + day - 1);

    return max;
}

完整代码https://github.com/Orange1991/leetcode/blob/master/122/c/main.c

代码 CPP

class Solution {
public:
    /**
     * 计算最大收益
     * @param prices : 每天的股票价格
     * @return : 最大收益
     * @note : 可以买卖多次
     */
    int maxProfit(vector<int>& prices) {
        int pricesSize = prices.size();
        if (pricesSize <= 1) return 0;

        int max = 0, day;
        for (day = 1; day < pricesSize; ++day)
            if (prices[day] > prices[day - 1])
            max += prices[day] - prices[day - 1];

        return max;
    }
};

完整代码https://github.com/Orange1991/leetcode/blob/master/122/cpp/main.cpp

运行情况

Lauguage Status Time
c Accept 4ms
cpp Accept 8ms

2015/7/8

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

Leetcode_122_Best Time to Buy and Sell Stock II

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43155725 Say you have an a...
  • pistolove
  • pistolove
  • 2015年01月26日 18:28
  • 1451

【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
  • 3434

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

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

[leetcode 121] Best Time to Buy and Sell Stock---只能买卖股票一次的最大收益

Question: Say you have an array for which the ith element is the price of a given stock on day i. ...
  • Xiaohei00000
  • Xiaohei00000
  • 2016年03月15日 08:26
  • 668

LeetCode(122)Best Time to Buy and Sell Stock2

题目如下: Say you have an array for which the ith element is the price of a given stock on day i. Design...
  • feliciafay
  • feliciafay
  • 2014年01月21日 03:11
  • 2308

【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
  • 21730

Best Time to Buy and Sell Stock II -- LeetCode

原题链接: http://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/  这道题跟Best Time to Buy and...
  • linhuanmars
  • linhuanmars
  • 2014年04月09日 05:33
  • 9680

leetcode_c++:Best Time to Buy and Sell Stock II(122)

题目Say you have an array for which the ith element is the price of a given stock on day i.Design an a...
  • mijian1207mijian
  • mijian1207mijian
  • 2016年06月10日 23:19
  • 291

【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
  • 6925
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode 122 Best Time to Buy and Sell Stock II 不限次数买卖股票最大收益
举报原因:
原因补充:

(最多只允许输入30个字)