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

12 篇文章 0 订阅

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

问题描述:

  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;
}

欢迎指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值