不知道为什么这个解决方案返回未定义数组算法

问题描述

问题如下:

假设您有一个数组,第i个元素是第i天给定股票的价格。

如果只允许您最多完成一笔交易(即买入和卖出一股股票),请设计一种算法以找到最大的利润。

请注意,您不能在买股票之前卖出股票。

我的解决方案不断返回不确定的信息,我不确定为什么。关于如何解决此问题以使其正确的任何想法?

var maxProfit = function(prices) {
    var minNum = Math.min(...prices);
    var indMin = prices.indexOf(minNum);
    for (var ind = 0; ind > indMin && ind < prices.length ; ind++){
        var maxNum = Math.max(...prices);
        var profit = maxNum - minNum
    return profit

    }}

谢谢!

解决方法

您的循环在第一次迭代之前停止。进入循环的条件是ind > indMin && ind < prices.length。在第一次迭代中,ind == 0indMin至少为0。由于ind > indMin不能为真,因此循环立即结束。

您也不应该在循环内返回。您需要继续寻找更好的解决方案,并在最大化利润后最终返回。

您不能使用开始时发现的最低价格,因为它可能毕竟是您希望以获利的价格出售的所有价格。

使用嵌套循环。一个循环选择一个购买价格,然后内部循环找到获得最高利润的销售价格。

let profit = 0;
for (let pindex = 0; pindex < prices.length - 1; pindex++) {
    for (let sindex = pindex + 1; sindex < prices.length; sindex++) {
        if (prices[sindex] - prices[pindex]) > profit) {
            profit = prices[sindex] - prices[pindex];
        }
    }
}

如果您想使用Math.max(),则可以将其替换为内部循环。使用slice()获取购买日期之后的所有价格。

let profit = 0;
prices.forEach((purchase_price,i) => {
    let max_sale_price = Math.max(...prices.slice(i+1));
    profit = Math.max(profit,max_sale_price - purchase_price);
});

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...