22 买卖股票的最佳时机(

作者: Turbo时间限制: 1S章节: 贪心

晚于: 2020-07-22 12:00:00后提交分数乘系数50%

截止日期: 2020-07-29 12:00:00

问题描述 :

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]

输出: 7

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。

     随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例 2:

输入: [1,2,3,4,5]

输出: 4

解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。

     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。

     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入: [7,6,4,3,1]

输出: 0

解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

说明:

1 <= prices.length <= 3 * 10 ^ 4

0 <= prices[i] <= 10 ^ 4

可使用以下main函数:

int main()

{

    int n,data;

    vector<int> prices;

    cin>>n;

    for(int i=0; i<n; i++)

    {

        cin>>data;

        prices.push_back(data);

    }

    int res=Solution().maxProfit(prices);

    cout<<res;

    return 0;

}

输入说明 :

首先输入prices数组的长度n,

然后输入n个整数,以空格分隔。

输出说明 :

输出一个整数,表示结果

输入范例 :

输出范例 :

#include <iostream>
#include <vector>
using namespace std; 
//遍历整个股票交易日价格列表 price,策略是所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。


//设 tmp 为第 i-1 日买入与第 i 日卖出赚取的利润,即 tmp = prices[i] - prices[i - 1] ;
//当该天利润为正 tmp > 0,则将利润加入总利润 profit;当利润为 000 或为负,则直接跳过;
//遍历完成后,返回总利润 profit。

class Solution {
public:
    int maxProfit(vector<int>& prices) 
    {
        int profit=0;
        for(int i=1;i<prices.size();i++)
        {
            int temp=prices[i]-prices[i-1];
            if(temp>0)
                profit+=temp;
        }
        return profit;
    }
};
int main()
{
    int n,data;
    vector<int> prices;
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cin>>data;
        prices.push_back(data);
    }
    int res=Solution().maxProfit(prices);
    cout<<res;

    return 0;
}
//https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/solution/best-time-to-buy-and-sell-stock-ii-zhuan-hua-fa-ji/
原文地址:https://www.cnblogs.com/zmmm/p/13622106.html