[LeetCode] Best Time to Buy and Sell Stock II

简介: Say you have an array for which the ithi^{th} element is the price of a given stock on day ii.Design an algorithm to find the maximum profit. You may complete as many transactions as you

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).

解题思路

与版本1的题目相比,本题的区别在于允许多次交易,因此最大收益等于每对极大值与极小值的差值之和(每次在极小值点买入,极大值点卖出)。
首先将买入价格设定为prices[0],然后遍历数组,如果当前元素的值大于等于下一个元素(该元素为极大值点),则将该元素的值与买入价格的差值加到总收益中,同时,将买入价格设置为该元素的下一个元素(在价格跌落时,当前元素值与买入价格之差为0)。

实现代码1

/*****************************************************************
    *  @Author   : 楚兴
    *  @Date     : 2015/2/17 23:18
    *  @Status   : Accepted
    *  @Runtime  : 16 ms
******************************************************************/
#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    int maxProfit(vector<int> &prices) {
        if (prices.size() <= 1)
        {
            return 0;
        }
        int max_global = 0;
        int base = prices[0];
        int i = 0;
        while (i < prices.size() - 1)
        {
            if (prices[i] >= prices[i + 1])
            {
                max_global += prices[i] - base;
                base = prices[i + 1];
            }
            i++;
        }
        max_global += prices[i] - base;

        return max_global;
    }
};

实现代码2

class Solution {
public:
    int maxProfit(vector<int> &prices) {
        if (prices.size() == 0)
        {
            return 0;
        }

        int max_global = 0;
        for (int i = 0; i < prices.size() - 1; i++)
        {
            max_global = max(max_global, max_global + prices[i + 1] - prices[i]);
        }

        return max_global;
    }
};
目录
相关文章
|
算法
LeetCode 121. Best Time to Buy and Sell Stock
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果您最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
78 0
LeetCode 121. Best Time to Buy and Sell Stock
|
算法
LeetCode 123. Best Time to Buy and Sell Stock III
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
98 0
LeetCode 123. Best Time to Buy and Sell Stock III
|
算法
LeetCode 188. Best Time to Buy and Sell Stock IV
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
81 0
LeetCode 188. Best Time to Buy and Sell Stock IV
Buy a Shovel
Buy a Shovel
99 0
Buy a Shovel
Leetcode-Easy 121. Best Time to Buy and Sell Stock
Leetcode-Easy 121. Best Time to Buy and Sell Stock
123 0
Leetcode-Easy 121. Best Time to Buy and Sell Stock
1092. To Buy or Not to Buy (20) simple
#include using namespace std; int main(int argc, const char * argv[]) { // insert code here.
846 0