【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));
    }
};

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南) 本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。 阅读详情

相关推荐

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南

本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。

weixin_29229261的博客 1025

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

题目解析 1

OceanStar的博客 449

CentOS7下OpenVPN Access Server 2.12.0安装与智能分流配置指南

本文详细介绍了在CentOS7系统上安装OpenVPN Access Server 2.12.0并进行智能分流配置的完整指南。从环境准备、核心安装到智能分流策略的深度配置,提供了经过验证的优化方案和故障排查技巧,帮助用户实现高效的VPN网关部署和流量管理。

weixin_30546189的博客 290

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

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

Sugar_wolf的博客 357

深入CRSF协议数据包:手撕STM32代码,教你像调试串口一样分析ELRS遥控数据流

本文深入解析CRSF协议数据包,通过手撕STM32代码,教你如何像调试串口一样分析ELRS遥控数据流。从硬件准备到数据包捕获状态机设计,再到高级数据分析技巧和实战应用,全面覆盖CRSF协议的解析与优化,帮助开发者构建稳定可靠的通信系统。

weixin_29194693的博客 337

Synopys 验证系列-EDA 总结

VC Formal 解决方案包括一整套正式应用程序 (App),包括属性验证 (FPV)、自动提取属性 (AEP)、覆盖分析器 (FCA)、连接性检查 (CC)、时序等效性检查 (SEQ)、寄存器验证 (FRV)、测试平台分析仪 (FTA)、形式导航器 (NAV) 以及用于验证标准总线协议的一组断言 IP (AIP)。

qq_41289491的博客 1428

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

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)

本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。

weixin_29266007的博客 384

【每日一题】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

HALCON 20.11实战:5步搞定工业图像异常检测(附完整代码)

本文提供了一份基于HALCON 20.11的工业图像异常检测实战指南。通过五个核心步骤——环境准备、数据预处理、模型训练、推理解析与工程化部署,详细演示了如何利用深度学习技术,仅使用正常样本快速构建并优化金属表面划痕等缺陷的检测模型,并附有完整可运行的HDevelop代码,助力工程师实现高效、智能的工业视觉质检。

weixin_29243279的博客 141

STM32F407驱动OV2640摄像头:从SCCB协议到I2C模拟的保姆级避坑指南

本文详细介绍了STM32F407驱动OV2640摄像头的完整流程,重点解析SCCB协议与I2C的关键差异,并提供GPIO模拟实现方案。通过实战案例和调试技巧,帮助开发者避开常见陷阱,实现稳定的图像采集功能。

weixin_28700411的博客 346

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

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

linxibo's 优快云 585

Spring-AI 第 17 章 - 飞书机器人接入详解

✅ Stream 长连接(官方 SDK)✅ AI 对话(支持工具调用)✅ 消息接收与回复✅ 天气查询✅ 数据库查询✅ 数学计算✅ 事件去重Stream 长连接模式:使用官方 SDK 建立 WebSocket 长连接,服务器主动连接飞书,无需公网 IP消息处理流程:接收消息 → 解析内容 → AI 处理 → 回复用户AI 工具调用:接入 FunctionTools,支持天气、计算、日期、数据库查询等多种工具。

AppBlog.CN全栈架构 211

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

Pisasama的博客 416

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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、付费专栏及课程。

余额充值