Leetcode 918. Maximum Sum Circular Subarray (滑动窗口+单调队列好题)

  1. Maximum Sum Circular Subarray
    Medium

Given a circular integer array nums of length n, return the maximum possible sum of a non-empty subarray of nums.

A circular array means the end of the array connects to the beginning of the array. Formally, the next element of nums[i] is nums[(i + 1) % n] and the previous element of nums[i] is nums[(i - 1 + n) % n].

A subarray may only include each element of the fixed buffer nums at most once. Formally, for a subarray nums[i], nums[i + 1], ..., nums[j], there does not exist i <= k1, k2 <= j with k1 % n == k2 % n.

Example 1:

Input: nums = [1,-2,3,-2]

Output: 3

Explanation: Subarray [3] has maximum sum 3.

Example 2:

Input: nums = [5,-3,5]

Output: 10

Explanation: Subarray [5,5] has maximum sum 5 + 5 = 10.

Example 3:

Input: nums = [-3,-2,-3]

Output: -2

Explanation: Subarray [-2] has maximum sum -2.

Constraints:

n == nums.length

1 <= n <= 3 * 104

-3 * 104 <= nums[i] <= 3 * 104

解法1:

不用滑动窗口和单调队列。实际上我们找连续子数组最大和 与 sum - 连续子数组最小和 之间的最大值就可以了。

cpp 复制代码
class Solution {
public:
    int maxSubarraySumCircular(vector<int>& nums) {
        int sum = 0, currMaxSum = 0, currMinSum = 0;
        int gMaxSum = INT_MIN, gMinSum = INT_MAX;
        for (auto num : nums) {
            sum += num;
            currMaxSum = max(currMaxSum + num, num);
            gMaxSum = max(gMaxSum, currMaxSum);
            currMinSum = min(currMinSum + num, num);
            gMinSum = min(gMinSum, currMinSum);
        }
        //if all negative
        if (gMinSum == sum) return gMaxSum;
        return max(gMaxSum, sum - gMinSum);
    }
};

解法2:滑动窗口 + 单调队列

相关推荐
zhangfeng11334 分钟前
大语言模型 bpe算法 后面对接的是 one-hot吗 nn.Embedding
算法·语言模型·embedding
Pluchon8 分钟前
硅基计划4.0 算法 动态规划高阶
java·数据结构·算法·leetcode·深度优先·动态规划
科学计算技术爱好者14 分钟前
NVIDIA GPU 系列用途分类梳理
人工智能·算法·gpu算力
程序员敲代码吗14 分钟前
嵌入式C++开发注意事项
开发语言·c++·算法
好学且牛逼的马16 分钟前
【Hot100|14-LeetCode53. 最大子数组和】
数据结构·算法·leetcode
无心水19 分钟前
17、Go协程通关秘籍:主协程等待+多协程顺序执行实战解析
开发语言·前端·后端·算法·golang·go·2025博客之星评选投票
东华果汁哥41 分钟前
【机器视觉 行人检测算法】FastAPI 部署 YOLO 11行人检测 API 服务教程
算法·yolo·fastapi
每天学一点儿43 分钟前
[SimpleITK] 教程 63:配准初始化 (Registration Initialization) —— 从几何对齐到手动干预。
算法
君义_noip1 小时前
信息学奥赛一本通 1463:门票
c++·算法·哈希算法·信息学奥赛·csp-s
永远都不秃头的程序员(互关)1 小时前
【决策树深度探索(二)】决策树入门:像人类一样决策,理解算法核心原理!
算法·决策树·机器学习