本文主要是介绍689. 3个无重叠子数组的最大和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
cpp:
/** @lc app=leetcode.cn id=689 lang=cpp** [689] 三个无重叠子数组的最大和*/// @lc code=start
class Solution {
public:vector<int> maxSumOfThreeSubarrays(vector<int>& nums, int k) {vector<int> ans(3);int n = nums.size();int sum1 = 0, maxsum1 = 0, maxsum1idx = 0;int sum2 = 0, maxsum12 = 0, maxsum12idx1 = 0, maxsum12idx2 = 0;int sum3 = 0, maxTotal = 0;for (int i = 2 * k; i < n; i++) {// 更新窗口中3个子数组的和sum1 += nums[i - 2 * k];sum2 += nums[i - k];sum3 += nums[i];// 窗口已经形成if (i >= 3 * k - 1) {// 当前窗口的一个子数组和 大于已有的最大值,更新if (sum1 > maxsum1) {maxsum1 = sum1;maxsum1idx = i - 3 * k + 1;}// 当前窗口的2个子数组和 大于已有的最大值,更新if (maxsum1 + sum2 > maxsum12) {maxsum12 = maxsum1 + sum2;maxsum12idx1 = maxsum1idx;maxsum12idx2 = i - 2 * k + 1;}// 当前窗口的 3个子数组和 大于已有的最大值,更新if (maxsum12 + sum3 > maxTotal) {maxTotal = maxsum12 + sum3;ans[0] = maxsum12idx1;ans[1] = maxsum12idx2;ans[2] = i - k + 1;}// 滑动窗口,减去左边界的值sum1 -= nums[i - 3 * k + 1];sum2 -= nums[i - 2 * k + 1];sum3 -= nums[i - k + 1];}}return ans;}
};
// @lc code=end
这篇关于689. 3个无重叠子数组的最大和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!