面试题63. 股票的最大利润

2020-03-12  本文已影响0人  阿星啊阿星

股票的最大利润

题目描述

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?


示例:

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

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。


提示:
0 <= 数组长度 <= 10^5

转载来源:力扣(LeetCode)


题目分析

说起股票,最近可是亏大了,癌股啊癌股~

回归正题,这题的暴力做法是每一个数都和后面的数做差值,然后得出利润最大的数,也就是差值最大的正数,时间复杂度是O(N2),那优雅一点的做法时间复杂度一定得小于暴力法吧;下面就来讲讲优雅一点的做法:

演示例子:[7,1,5,0,6,4]

走完了6天,知道了最大利润是6,这波是血赚的......

上面的大白话其实已经蕴含着这题的算法精髓了,精髓就是马后炮,每天都和前面股市最低的减一下,看能不能比前面赚的最多的还要多,是的话就替换掉......

        fun maxProfit(prices: IntArray): Int {
            if(prices.isEmpty() || prices.size == 1)
                return 0
            var maxProfit = 0
            var nowLowest = prices[0]
            for(i in 1 until prices.size){
                if(prices[i] > nowLowest)
                    maxProfit = max(maxProfit,prices[i] - nowLowest)
                else if(prices[i] < nowLowest)
                    nowLowest = prices[i]
            }
            return maxProfit
        }
上一篇下一篇

猜你喜欢

热点阅读