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

问题描述

问题如下:

假设您有一个数组,其中第 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

    }}

谢谢!

标签: javascriptalgorithmarray-algorithmsmaximum-profit-problem

解决方案


您的循环在第一次迭代之前停止。进入循环的条件是ind > indMin && ind < prices.length。在第一次迭代中,ind == 0并且indMin至少为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);
});

推荐阅读