我对算法有疑问。我有一个数组,其中第n个元素是第X天的操作价格。我必须从数组中找到最大可能的利润。我试图使用reduce(),但我不知道具体如何。这个练习对我来说有点困难,但是我想知道如何做。
例如
输入: [9,2,6,1,6,7]
输出: 10
说明:
您在第二天买入(股价= 2),然后在第三天卖出(股价= 6),因此获利6-2 =4。然后您在第四天买入(股价= 1) ),然后卖出第六天(股价= 7),则获利7-1 =6。两次交易获利6 + 4 = 10
答案 0 :(得分:1)
您可以先获取数组中的局部最小值或最大值,然后获取利润。
找到本地的最小值和最大值
2 6 1 8 2 3 6 7 9 1 5 6 2 7 9 5 1 3 4 7 6 2 4 8 6 4 < > < > < < < < > < < > < < > > < < < > > < < > > 2 6 1 8 2 9 1 6 2 9 1 7 2 8 4
var data = [9, 2, 6, 1, 6, 7] ,
localMinMax = data.reduce((r, v, i, a) => {
if (!(r.length & 1) === a[i - 1] < v) {
r[r.length - 1] = v;
} else {
r.push(v);
}
return r;
}, []),
result = 0,
i = 0;
while (i < localMinMax.length) {
result += localMinMax[i + 1] - localMinMax[i];
i += 2;
}
console.log(result);
console.log(localMinMax);