Sunny-117 / js-challenges

✨✨✨ Challenge your JavaScript programming limits step by step

Home Page:https://juejin.cn/column/7244788137410560055

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

买卖股票的最佳时机

ZZK520 opened this issue · comments

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

低买高卖,假设在最低点当天买入,那么此后的每一天卖出都会有一个利润,取其中最大值。

     var maxProfit = function (prices) {
        if(!prices.length) return 0;

        let maxProfit=0;
        let minBuyPrice=prices[0];
        for (const price of prices) {
            /**设置最低买入价格,每日价格在浮动,但是最低点可能两三天才更新。
             * 对于同一个最低点,后面的卖出价格越高,利润越高
             * */ 
            minBuyPrice=Math.min(price,minBuyPrice);
            // 之前最大利润与当前卖出利润取最大值
            maxProfit=Math.max(maxProfit,price-minBuyPrice);
        }
        return maxProfit;
    };
    // const arr = [4,6,2,3];
    const arr = [7, 1, 5, 3, 6, 4];
    const res=maxProfit(arr);
    console.log(res);

去pr哇

在算法这栏开个DP专题?

开个DP专题?
这个得看册子这一部分的整体架构,取决于用到的数据结构划分还是用算法划分(比如后期是否会加入些栈、队列的数据结构)?
我是看到既有的分栏标题(矩阵相关、链表、二叉树)用的都是数据结构,所以这里直接用了数组作为标题。

股票这个更适合双胞胎专题hh,股票有6-8个题来着,这个就不建议按照解题思路来整理了

我先关了。