我正在做一项练习,但无法解决。我需要通过购买和销售比特币来获得最大的累计利润。我有一个函数(A,Y),它接收一个A =不同时间的价格数组和一个Y =费用。
限制:
注意:如果比特币在0时购买,并在1时出售,则会产生A[1] - A[0] = 7050-7200-Y = -200的损失。因此,该操作未执行。
注意2:您一次只能拥有1个比特币。要出售,必须先购买。要购买,您需要没有或已经出售。
注意3:动作需要按时间连续进行。您不能在A[5]购买并在A[4]出售。
注意4:如果无法获利,则应返回0
复杂度为O(N)
A = [7200,7050,7300,7500,7440,7200,7300,7280,7400] //expected result 550
Y = 50
A[3] - A[1] - Y = 7500 - 7050 - 50 = 400
A[8] - A[5] - Y = 7400 - 7200 - 50 = 150
result = 550 //maximum accumulated profit
这是我所拥有的
function solution(A, Y) {
if(A.length < 2) {
return 0;
}
var minIndex = (A[0] > A[1]) ? 1 : 0;
var minPrice = A[minIndex];
var acum = 0;
var i = minIndex + 1
for (i; i< A.length-1; i++) {
if( (A[i] - minPrice - Y) > (A[i+1] - minPrice - Y )) {
acum += A[i] - minPrice - Y;
i = i+1
} else {
acum += A[i + 1] - minPrice - Y;
i = i+2
}
minPrice = (A[i] > A[i+1]) ? A[i+1] : A[i];
}
return acum > 0 ? acum : 0;
}
实际上我得到的是450,但应该是550