贪心算法之股票买卖问题(Best Time to Buy and Sell Stocks)

这道题目应该是股票买卖问题里面比较简单的一道

问题描述:

  Problem Description
  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 (i.e., buy one and sell one share of the stock multiple times).

For example, there is an array [7, 1, 5, 3, 6, 4] and its answer 7. The element 7 in the array means the price of a given stock on day 0, and the element 4 means the price of the stock on day 5. The answer 7 means the maximum profit.

  Note: You may not engage in multiple transactions at the same time (i.e., you must sell the stock before you buy again).

  Input
An array with int elements, separated by spaces.

  Output
An integer.

  Sample Input
7 1 5 3 6 4

  Sample Output
7

解题思路:

  该问题主要有两个约束:第一,同时只能持有一支股票,第二,再次买入之前需要卖掉以前的。这个问题乍一看,有点像动态规划,但是实际用动态规划的分析方法分析起来非常复杂。不妨换个角度考虑,从贪心算法的角度,只要后一天的price大于前一天的price,我们就卖出。为了便于理解,我画了一个简图:
在这里插入图片描述
这道题就是求解的答案就等于把股价波动得到图像中所有的单调增的片段相加。这样理解的话,这个题目就很容易AC了。

C++源代码

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
    int price[1000000];
    int i=0,j=0,temp;
    long int profit=0;
    char c;
    cin>>price[i++];
    while((c=getchar())!='\n')
    {
        cin>>temp;
        price[i++]=temp;
    }//这个while 循环是把输入的带有空格的字符串转化为只有数字的股价数组
    for(int j=1;j<i;j+=1)
    {
        if(price[j-1]<price[j])
        {
            profit+=(price[j]-price[j-1]);
        }
    }
    cout<<profit;
    return 0;
}

欢迎指正。

发布了28 篇原创文章 · 获赞 1 · 访问量 622

猜你喜欢

转载自blog.csdn.net/qq_44384577/article/details/103290729
今日推荐