【LeetCode】1031. 两个非重叠子数组的最大和

1031. 两个非重叠子数组的最大和 这道题目的关键在于如何高效地枚举两个子数组的所有可能组合,并保证它们不重叠。前缀和的使用极大提高了区间和计算的效率,维护子数组最大和的思路巧妙解决了两个子数组位置关系的复杂性。试着用滑动窗口和动态规划分别实现。研究如何扩展到 k 个非重叠子数组的最大和问题。 阅读详情

 

给你一个整数数组 nums 和两个整数 firstLen 和 secondLen,请你找出并返回两个非重叠 子数组 中元素的最大和,长度分别为 firstLen 和 secondLen 。

长度为 firstLen 的子数组可以出现在长为 secondLen 的子数组之前或之后,但二者必须是不重叠的。

子数组是数组的一个 连续 部分。

示例 1:

输入:nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2
输出:20
解释:子数组的一种选择中,[9] 长度为 1,[6,5] 长度为 2。

示例 2:

输入:nums = [3,8,1,3,2,1,8,9,0], firstLen = 3, secondLen = 2
输出:29
解释:子数组的一种选择中,[3,8,1] 长度为 3,[8,9] 长度为 2。

示例 3:

输入:nums = [2,1,5,6,0,9,5,0,3,8], firstLen = 4, secondLen = 3
输出:31
解释:子数组的一种选择中,[5,6,0,9] 长度为 4,[0,3,8] 长度为 3。

提示:

  • 1 <= firstLen, secondLen <= 1000
  • 2 <= firstLen + secondLen <= 1000
  • firstLen + secondLen <= nums.length <= 1000
  • 0 <= nums[i] <= 1000

这里简单介绍一下C++STL中的accumulate函数:

主要用来对指定范围内元素求和,但也自行指定一些其他操作,如范围内所有元素相乘、相除等。

  • 函数共有四个参数,其中前三个为必须,第四个为非必需。

  • 若不指定第四个参数,则默认对范围内的元素进行累加操作。

accumulate(起始迭代器, 结束迭代器, 初始值, 自定义操作函数)

如:计算数组中所有元素的和

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int main() {
    vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int sum = accumulate(arr.begin(), arr.end(), 0); // 初值0 + (1 + 2 + 3 + 4 +... + 10)
    cout << sum << endl;	// 输出55
    return 0;
}

动态规划 + 滑动窗口:

class Solution {
public:
    int help(vector<int>& nums,int firstLen,int secondLen){//滑动窗口
        //初始化左窗口数值大小
        int suml = accumulate(nums.begin(),nums.begin()+firstLen,0);
        //滑动窗口,记录数据是否跟着滑动,记录最大数据
        int max_suml = suml;
        //初始化右窗口数值大小
        int sumr = accumulate(nums.begin()+firstLen,nums.begin()+firstLen+secondLen,0);
        //返回值
        int res = sumr+max_suml;
        //初始化窗口位置大小,开始滑动
        for(int j = firstLen+secondLen,i=firstLen;j<nums.size();i++,j++){
            //滑动之后左窗口的值
            suml+=(nums[i]-nums[i-firstLen]);
            //记录最大值,即值是否随着窗口滑动
            max_suml=max(suml,max_suml);
            //滑动之后右窗口的值
            sumr+=(nums[j]-nums[j-secondLen]);
            //获取窗口滑动前后俩子数组的最大值
            res=max(res,max_suml+sumr);
        }
        return res;
    }

    int maxSumTwoNoOverlap(vector<int>& nums, int firstLen, int secondLen) {//first数组在second数组前或后,即左窗口或右窗口
        return max(help(nums, firstLen, secondLen), help(nums, secondLen, firstLen));
    }
};

手把手教你用6轴IMU跑通LIO-SAM:参数配置与代码修改保姆级教程 本文提供了一套完整的6轴IMU适配LIO-SAM的解决方案,包括参数配置与代码修改的详细步骤。从理解6轴与9轴IMU的关键差异入手,逐步指导如何调整核心配置文件params.yaml、重构utility.h关键函数、优化mapOptimization.cpp的位姿融合逻辑,并给出编译验证与性能调优建议,帮助开发者快速实现6轴IMU在LIO-SAM中的稳定运行。 阅读详情

相关推荐

51单片机智能小车

最近学校举办了一个智能小车比赛,比赛内容为用手机蓝牙控制小车拥有5个功能,分别是超声波舵机避障,测距(显示在LCD1602上), 红外跟随,循迹还有蓝牙控制小车前进后退左转又转以及停止。 文章目录 蓝牙控制所有功能 一、蓝牙控制前进后退左转右转停止 二、舵机超声波避障加测距 三、红外跟随 四、循迹 五、代码部分 六、完整代码 前言 基于51单片机的智能小车是比较基础的小车,很适合初学者学习 提示:以下是本篇文章正文内容,下面案例可供参考 一、整体思路 这款小...

m0_55977420的博客 1万+

leetcode:689. 三个无重叠子数组的最大和

题目解析 1

OceanStar的博客 449

单片机多级菜单的简单实现

单片机多级菜单的简单实现 多级菜单的思路 最近想把stm32上的oled显示屏做的好看一些,于是动手写了写一个多级菜单,思路很简单,每个页面用单独的函数封装好,每个功能也是用单独的函数进行封装,用了3个按键,两个切换键,一个确定键。 首先来看看用啥判断页面的(这偷个懒,希望没人打我) //页面标志位 uint8_t s1 = 0; //主页面功能号 uint8_t s2 = 0; //主次页面判断标志位 uint16_t s3 = 1; //次页面功能号 主页面的显示函数,这是个很枯燥的一

qq_43940175的博客 7606

【1031. 两个非重叠子数组的最大和】

【1031. 两个非重叠子数组的最大和】

Sugar_wolf的博客 357

生成对抗网络——CGAN(代码+理解)

CGAN(Conditional Generative Adversarial Network)模型是一种 深度学习模型,属于生成对抗网络(GAN)的一种 变体。它的 基本思想是通过 训练生成器和判别器两个网络,使生成器能够生成与给定条件 相匹配的 合成数据,而判别器则 负责区分真实数据和 生成数据。相比于GAN它引入了条件信息(y),使得生成器可以生成与给定条件相匹配的合成数据,从而提高了生成数据的可控性和针对性。

CXDNW的博客 1万+

【实验】Linux下完全卸载oracle单实例(亲身体验完整版)

停止oracle数据库服务 停止监听 卸载数据库实例 因为自己懒得再弄dbca图形化界面啥的,直接采用dbca静默删除数据库实例,命令如下 dbca -silent -deleteDatabase -sourcedb orclhq -sid orcl -sysDBAUserName orcl -sysDBAPassword zte [oracle@slave ~]$ dbca -silent ...

萝卜吃鱼914的博客 1945

2020-08-16大疆嵌入式笔试编程题:求两个不重叠连续子串的最大和

【描述】 从输入数组中找出两个连续子串,并且使这 两个连续字串和 之间的和最大。 输入:1,-1,2,2,3,-3,4,-4,5,-5 输出:13 即 {2,2,3,-3,4} 和 {5} 的和(8+5=13) 【code】 参考:面试题42:连续子数组的最大和 #include<iostream> #include<vector> #include<string> using namespace std; int findGreatSumOfSubarray(vect

weixin_42715287的博客 518

FunASR与FreeSWITCH融合实战:从零构建高精度语音质检系统

本文详细介绍了如何将FunASR与FreeSWITCH融合,构建高精度语音质检系统。通过实时语音听写技术,结合热词定制和多模型切换,实现客服中心等场景的自动化质检,显著提升识别准确率和效率。系统架构涵盖音频采集、识别处理和业务应用三层,支持负载均衡和性能优化,适用于工业级部署。

weixin_29198045的博客 980

【每日一题】1031. 两个非重叠子数组的最大和

给你一个整数数组 nums 和两个整数 firstLen 和 secondLen,请你找出并返回两个非重叠 子数组 中元素的最大和,长度分别为 firstLen 和 secondLen。长度为 firstLen 的子数组可以出现在长为 secondLen 的子数组之前或之后,但二者必须是不重叠的。子数组是数组的一个 连续 部分。示例 1:输入:nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2输出:20。

weixin_67985254的博客 167

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 649

Ubuntu18.04环境搭建与疑难解析:从零复现YOLO-6D姿态估计算法

本文详细介绍了在Ubuntu18.04环境下从零开始复现YOLO-6D姿态估计算法的完整流程,包括系统配置、Conda环境搭建、PyTorch安装、依赖项管理、源代码获取、数据集准备以及训练验证过程。针对Singleshotpose算法的特殊需求,提供了详细的疑难解析和性能优化技巧,帮助开发者高效完成算法复现和应用部署。

weixin_30369041的博客 457

[leetcode笔记] 1031. 两个非重叠子数组的最大和

leetcode算法题:1031. 两个非重叠子数组的最大和 [python实现]

linxibo's 优快云 585

Pytorch入门教程

Pytorch学习总结:1.张量Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于NumPy的ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4万+

Leetcode 1031. 两个非重叠子数组的最大和

Leetcode 1031. 两个非重叠子数组的最大和 题目 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的 V,而 V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1]) 并满足下列条件之一: 0 <= i < i + L - 1 <

weixin_43891775的博客 175

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

力扣1031. 两个非重叠子数组的最大和

题目要求找到两段长分别为firstLen和secondLen的子数组,使两段元素和最大题解见枚举第二段区间的右端点,,并用前缀和优化求子数组元素和。

Pisasama的博客 416

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode.1031 两个非重叠子数组的最大和

输入:nums = [2,1,5,6,0,9,5,0,3,8], firstLen = 4, secondLen = 3。输入:nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2。输入:nums = [3,8,1,3,2,1,8,9,0], firstLen = 3, secondLen = 2。解释:子数组的一种选择中,[5,6,0,9] 长度为 4,[0,3,8] 长度为 3。的子数组之前或之后,但二者必须是不重叠的。的子数组可以出现在长为。

感觉画质不如...原神的博客 122

LeetCode 1031. 两个非重叠子数组的最大和(一次遍历,要复习)*

文章目录1. 题目2. 解题2.1 暴力枚举 1. 题目 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的 V,而 V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1]) 并满足下列条件之一: 0 <= i < i + L - 1 < j <

Michael是个半路程序员 1434

LeetCode-Python-1031. 两个非重叠子数组的最大和

给出非负整数数组A,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为L和M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的V,而V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])并满足下列条件之一: 0 &lt...

Keep Coding 941

Leetcode 1031:两个非重叠子数组的最大和

题目描述 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的 V,而 V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1]) 并满足下列条件之一: ...

weixin_35338624的博客 322

模拟卷Leetcode【普通】1031. 两个非重叠子数组的最大和

1031. 两个非重叠子数组的最大和 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的 V,而 V = (A[i] + A[i+1] + … + A[i+L-1]) + (A[j] + A[j+1] + … + A[j+M-1]) 并满足下列条件之一: 0 <= i < i + L - 1 < j < j + M - 1 &lt

卷子的博客 651

leetcode第133周赛——1031. 两个非重叠子数组的最大和

给出非负整数数组A,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为L和M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的V,而V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])并满足下列条件之一: 0 &lt...

来自师范的学渣 786

​力扣解法汇总1031. 两个非重叠子数组的最大和

然后就可以遍历nums数组,分别枚举firstLen长度的子数组求和,然后确定firstLen的位置后,在在剩余的空间内枚举所有secondLen长度子数组求和。子数组的一种选择中,[5,6,0,9] 长度为 4,[0,3,8] 长度为 3。子数组的一种选择中,[3,8,1] 长度为 3,[8,9] 长度为 2。子数组的一种选择中,[9] 长度为 1,[6,5] 长度为 2。* 首先求出前缀和,这样就方便求出某个区间的和。的子数组之前或之后,但二者必须是不重叠的。的子数组可以出现在长为。

分享+记录 1341

【Leetcode_总结】1031. 两个非重叠子数组的最大和- python

Q: 给出非负整数数组A,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为L和M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的V,而V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])并满足下列条件之一: 0...

maka_uir的博客 534

每日算法系列【LeetCode 1031】两个非重叠子数组的最大和

题目描述 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 示例1 输入: A = [0,6,5,2,2,5,1,9,4], L = 1, M = ...

算法码上来 446

Leetcode第133周赛1031. 两个非重叠子数组的最大和

题目内容 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的 V,而 V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1]) 并满足下列条件之一: ...

chenguiyuan1234的博客 462

leetcode 1031. 两个非重叠子数组的最大和(C++)

给出非负整数数组A,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为L和M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。) 从形式上看,返回最大的V,而V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])并满足下列条件之一: 0 &lt...

qq_27060423的博客 468

LeetCode 1031. 两个非重叠子数组的最大和 每日一题

LeetCode 1031. 两个非重叠子数组的最大和 每日一题

lishifu_的博客 515
上一篇: 【LeetCode】2418.按身高排序
下一篇: 用Java写一个关机程序(图形化界面)
天皓Oo
博客等级 码龄5年 337粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值