LeetCode-918-环形子数组的最大和
题目
给定一个长度为 n
的环形整数数组 nums
,返回 nums
的非空 子数组 的最大可能和 。
环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i]
的下一个元素是 nums[(i + 1) % n]
, nums[i]
的前一个元素是 nums[(i - 1 + n) % n]
。
子数组 最多只能包含固定缓冲区 nums
中的每个元素一次。形式上,对于子数组 nums[i], nums[i + 1], ..., nums[j]
,不存在 i <= k1, k2 <= j
其中 k1 % n == k2 % n
。
示例 1:
1 | 输入:nums = [1,-2,3,-2] |
示例 2:
1 | 输入:nums = [5,-3,5] |
示例 3:
1 | 输入:nums = [3,-2,2,-3] |
提示:
n == nums.length
1 <= n <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
题解
参考:
这一题要分两个情况:
第一个情况是最大和不跨越数组,第二个情况是最大和跨越了数组(也就是环形从后面连到前面了)。
对于不跨越数组的情况,那就是53题啦;
当跨越了数组时,因为最大子数组和+其余元素和=常数,所以其余元素和越小,子数组和就越大,那么计算的时候我们维护最大子数组和与其余元素和即可。
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Excelius's World!