给出阵列中的一系列股票价格。 匹克什么时候买,什么时候卖,以获得最大利润(given a ser

2019-10-28 21:00发布

给出阵列中的一系列股票价格。 挑选的时候买,什么时候卖,以获得最大的利润。 从一个网站,我得到了这样的事情,EF MAXPROFIT(价格):

buydate,selldate = 0,0

maxprof = 0 minprice =价格[0] MINDATE = 0

为D,P在枚举(价格[1:]):如果p <minprice:minprice = P MINDATE = D + 1继续

教授= P - minprice

如果教授> maxprof:maxprof =教授buydate,selldate = MINDATE,D + 1

回报(buydate,selldate),maxprof

但我think..we应该考虑负价格too..isn't? 任何其他解决方案或意见是最欢迎

Answer 1:

理想情况下,你要当他们的最低买入股票,当他们卖出最高。 所以,找出其中的波峰和波谷都在你的数据,而这些都是你的销售和购买分别点。

这是因为通过数据集去,每次看着两个相邻的点,并跟踪当前的“潮流”一样简单(市场是否正在或打算上下)。 如果这一趋势是不断上升,价格下跌,那么你应该在当天卖出摔倒前。 在另一方面,如果这种趋势下去的时候,价格上涨,你应该买的当天就上涨了。



Answer 2:

既然你有历史,有似乎没有处罚交易,简单地采取了价格的衍生物和买的时候d / DX从负变为正,当它从正到负卖。

这样,你每天损失之前每股盈利和销售前购买。



Answer 3:

这是Java对上述问题的代码,它计算的最大利润

class Solution {
public int solution(int[] a) {

    if(a==null || a.length==0 || a.length==1)
    {
        return 0;
    }
    int buyDay=0;
    int sellDay=0;
    int profit=0;
    for(int i=1;i<a.length;i++)
    {
    int diff=0;

        if(a[buyDay]>a[i])
        {
            buyDay=i;

        }
        else if(a[sellDay]<a[i])
        {
            sellDay=i;
        }

        if(sellDay<buyDay)
            sellDay=buyDay;
        diff=a[sellDay]-a[buyDay];
        if(diff>profit)
        {
            profit=diff;
        }


    }
    return profit;

}
}


文章来源: given a series of stock prices in an array. Pick when to buy and when to sell to gain max profit