给出阵列中的一系列股票价格。 挑选的时候买,什么时候卖,以获得最大的利润。 从一个网站,我得到了这样的事情,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? 任何其他解决方案或意见是最欢迎
理想情况下,你要当他们的最低买入股票,当他们卖出最高。 所以,找出其中的波峰和波谷都在你的数据,而这些都是你的销售和购买分别点。
这是因为通过数据集去,每次看着两个相邻的点,并跟踪当前的“潮流”一样简单(市场是否正在或打算上下)。 如果这一趋势是不断上升,价格下跌,那么你应该在当天卖出摔倒前。 在另一方面,如果这种趋势下去的时候,价格上涨,你应该买的当天就上涨了。
既然你有历史,有似乎没有处罚交易,简单地采取了价格的衍生物和买的时候d / DX从负变为正,当它从正到负卖。
这样,你每天损失之前每股盈利和销售前购买。
这是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