股票的最大利润

168 阅读2分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

股票的最大利润

题目

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

示例 1:

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

示例 2:

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

限制:

0 <= 数组长度 <= 10^5

题目分析

这道题用一句话概况就是求给定数组中两个数字之间差值最大是多少。假设的n天卖出,那么利润的计算就是前n-1的最大利润 和 n减去n-1天中的最小值的差值,这两个数的最大值。

代码实现

class Solution {
    public int maxProfit(int[] prices) {
        int cost = Integer.MAX_VALUE, result = 0;
        for (int i : prices) {
            cost = Math.min(cost,i);
            result = Math.max(result,i- cost);
        }
        return result;
    }
}

这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉动态规划的使用和操作。

同样,我们找到了前面的子问题和原问题的关联关系和规律之后,那么原来的问题就被我们很快就能解决。

总结

这道题也是对动态规划的考察,除了动态规律,我们也可以使用两次for循环来求出最大差值是多少,虽然也能解决问题,但是效率肯定没有动态规划的效率高,因为动态规划只需要遍历一次数组就可以得到我们想要的结果。

这道题先分析到这里,如果有不当之处,欢迎指正。