给出阵列中的一系列股票价格。选择何时购买以及何时出售以获得最大利润。 从一个网站我得到类似的东西 - 如果maxprofit(价格):
buydate,selldate = 0,0
maxprof = 0 minprice = prices [0] mindate = 0
表示d,p表示枚举(价格[1:]):如果p < minprice:minprice = p mindate = d + 1继续
prof = p - minprice
如果教授&gt; maxprof:maxprof = prof buydate,selldate = mindate,d + 1
return(buydate,selldate),maxprof
但我认为..我们应该考虑负价格......不是吗?任何其他解决方案或评论都是最受欢迎的
答案 0 :(得分:3)
由于您有历史记录并且交易似乎没有受到惩罚,因此只需获取价格的衍生物并在d / dx从负值变为正值时买入,并在从正值变为负值时卖出。
通过这种方式,您可以在每次亏损之前购买并出售。
答案 1 :(得分:1)
理想情况下,您希望在最低价时购买股票,在价格最高时卖出。因此,找出数据中峰值和谷值的位置,分别是卖出点和买入点。
这就像通过数据集一样简单,一次查看两个相邻的点,并跟踪当前的“趋势”(市场是否上涨或下跌)。如果趋势上升且价格下跌,那么你应该在它下跌的前一天卖出。另一方面,如果趋势下降且价格上涨,您应该在涨价前一天买入。
答案 2 :(得分:0)
这是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;
}
}