第48天(中等题 数据结构)

打卡第四十八天
2道中等题
image

题目:
image

思路:前缀和+贪心,一边遍历数组计算前缀和,一边维护前缀和的最小值(相当于股票最低价格),用当前的前缀和(卖出价格)减去前缀和的最小值(买入价格),就得到了以当前元素结尾的子数组和的最大值(利润),用它来更新答案的最大值(最大利润)。题目要求子数组不能为空,应先计算前缀和-最小前缀和,再更新最小前缀和。相当于不能在同一天买入股票又卖出股票。

代码:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ans = INT_MIN;
        int min_pre_sum = 0;// 初始为0让子数组可以从任意位置开始
        int pre_sum = 0;
        for (int x : nums) {
            pre_sum += x;// 更新当前前缀和:加上当前元素x
            ans = max(ans, pre_sum - min_pre_sum);// 当前前缀和减去之前的最小前缀和 = 以某个位置结束的最大子数组和
            min_pre_sum = min(min_pre_sum, pre_sum);// 取当前前缀和和历史最小值中的较小值
        }
        return ans;
    }
};

耗时≈一小时 明天继续

posted @ 2025-12-08 00:04  Wy0518  阅读(4)  评论(0)    收藏  举报