力扣练习——22 买卖股票的最佳时机

1.问题描述

给定一个数组,它的第 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;

}

 

2.输入说明

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

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

3.输出说明

输出一个整数,表示结果

4.范例

输入

6
7 1 5 3 6 4

输出

7

5.题解请参考力扣https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/solution/mai-mai-gu-piao-de-zui-jia-shi-ji-ii-by-leetcode-s/

代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int maxProfit(vector<int>&prices)
//思想:贪心算法,题目要求必须在再次购买前售出之前的股票,可以多次买卖一支股票
{
    int n = prices.size();
    int maxprofit = 0;
    //一次遍历操作
    for (int i = 0; i < n - 1; i++)
    {
        maxprofit += max(0,prices[i + 1] - prices[i]);//注意这里的理解,计算的过程并不是交易的实际过程
    }
    return maxprofit;
}


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 = maxProfit(prices);

    cout << res;



    return 0;

}

 

posted @ 2022-07-15 10:27  努力奋斗的小企鹅  阅读(72)  评论(0)    收藏  举报