71.股票的最大利润

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

例如一只股票在某些时间节点的价格为 [9,11,8,5,7,12,16,14]。

如果我们能在价格为 5 的时候买入并在价格为 16 时卖出,则能收获最大的利润 11。

数据范围:

输入数组长度 [0,500]。

样例:

输入:[9, 11, 8, 5, 7, 12, 16, 14]
输出:11

代码:

class Solution {
    public int maxDiff(int[] nums) {
        //n为数组长度
        int n = nums.length;
        //处理边界情况:空数组直接返回0
        if(n == 0)return 0;
        //f[i]表示从第i天到最后一天中的最高价格
        int[] f = new int[n];
        //用于存储最大利润
        int res = 0;
        //逆向遍历数组,填充f数组
        for(int i = n-1;i>=0;i--){
            //最后一天的最高价格就是当天的价格
            if(i == n-1)f[i] = nums[i];
            //f[i]取第i+1天的最高价格和当天价格的较大值
            else f[i] = Math.max(f[i+1],nums[i]);
        }
        //正向遍历数组,计算最大利润
        for(int i = 0;i<n;i++)res = Math.max(res,f[i]-nums[i]);
        //返回最大利润
        return res;
    }
}
posted @ 2025-06-02 10:22  回忆、少年  阅读(10)  评论(0)    收藏  举报