如何使找到最大利润的算法?

时间:2019-07-08 13:42:33

标签: javascript arrays

我对算法有疑问。我有一个数组,其中第n个元素是第X天的操作价格。我必须从数组中找到最大可能的利润。我试图使用reduce(),但我不知道具体如何。这个练习对我来说有点困难,但是我想知道如何做。

例如

输入: [9,2,6,1,6,7]

输出: 10

说明:

您在第二天买入(股价= 2),然后在第三天卖出(股价= 6),因此获利6-2 =4。然后您在第四天买入(股价= 1) ),然后卖出第六天(股价= 7),则获利7-1 =6。两次交易获利6 + 4 = 10

1 个答案:

答案 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);