leetcode 689. Maximum Sum of 3 Non-Overlapping Subarrays(3个非重叠子数组的最大和)

基于STM32 HAL库的L298N四驱电机PWM调速与方向控制实战 本文详细介绍了基于STM32 HAL库驱动L298N电机控制板实现四驱小车PWM调速与方向控制的实战方法。涵盖硬件连接、GPIO与定时器配置、PWM生成、方向控制逻辑及电源管理等核心内容,并提供代码优化与常见问题解决方案,帮助开发者快速实现高效稳定的电机控制。 阅读详情

In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum.

Each subarray will be of size k, and we want to maximize the sum of all 3*k entries.

Return the result as a list of indices representing the starting position of each interval (0-indexed). If there are multiple answers, return the lexicographically smallest one.

Example:

Input: [1,2,1,2,6,7,5,1], 2
Output: [0, 3, 5]
Explanation: Subarrays [1, 2], [2, 6], [7, 5] correspond to the starting indices [0, 3, 5].
We could have also taken [2, 1], but an answer of [1, 3, 5] would be lexicographically larger.

给出一个数组,在数组中找到3个不重叠的子数组,每个子数组长度为k,使3个子数组的和最大,返回三个子数组的起始index

思路:
可分解成几个小问题,
第一步,分解问题,因为子数组的长度是k,那么中间子数组的起始index只能从k开始,到n-2k为止。如果知道了中间子数组的位置,左右两边子数组的范围也就知道了,这个时候如果知道了左右两边最大和的起始index,就相当于知道了3个子数组的起始index,问题得解。

对每一个中间子数组的位置,要能迅速得知左右两边子数组的最大和的起始index,就需要提前保存好每个范围内最大和对应的起始index,这就用到DP
而且如果已知起始index,因为子数组长度为k,就会知道结尾index,求这段长度内数组元素的和,会想到利用积分数组,即累加和数组

所以这道题用了(1)积分数组以方便求任意一段子数组的元素和,(2)DP用于保存最大和的起始index,及(3)slide window以遍历中间数组的位置

第二步,逐个解决小问题
(1) 先求一个积分数组。为了方便求前k个元素的和(需要用sum[k-1]-sum[-1],为了不考虑-1这个边界),在sum前面补一个0

(2) DP保存左右两边子数组最大和的起始index,先从左到右遍历,0~k-1这段不用考虑了,起始index都是0,从k开始到n-k+1,已知起始index,结尾index也就知道了,利用积分数组算这段长度内元素的和,一旦大于前面一个就更新保存index,否则就还是上一个保存的index
同理右边,从右到左遍历,从n-k到0,但是因为同样的和要保留较小的index,这里>=前一个值时就更新index

(3) 遍历中间数组的起始index,每个起始index都会对应左右两边子数组的最大和,把它们仨加起来,每遍历一个更新最大值和对应的3个子数组的起始index

参考方法

    public int[] maxSumOfThreeSubarrays(int[] nums, int k) {
        if(nums == null || nums.length == 0 || k < 1) {
            return new int[]{};
        }
        
        int n = nums.length;
        int[] sum = new int[n+1];
        int[] left = new int[n];
        int[] right = new int[n];
        int total = 0;
        int[] result = new int[3];
        
        for(int i = 1; i <= n; i++) {
            sum[i] = sum[i-1] + nums[i-1];
        }
        
        total = 0;
        for(int i = k-1; i < n; i++) {
            int tmp = sum[i+1] - sum[i+1-k];          
            if(tmp > total) {
                total = tmp;
                left[i] = i-k+1;
            } else {
                left[i] = left[i-1];
            }
        }
        
        total = 0;
        for(int i = n-k; i >= 0; i--) {
            int tmp = sum[i+k] - sum[i];
            if(tmp >= total) {
                total = tmp;
                right[i] = i;
            } else {
                right[i] = right[i+1];
            }
        }
        
        total = 0;
        for(int i = k; i < n-2*k+1; i++) {
            int tmp = sum[left[i-1]+k] - sum[left[i-1]] + sum[i+k] - sum[i]
                + sum[right[i+k] + k] - sum[right[i+k]];
            if(tmp > total) {
                total = tmp;
                result[0] = left[i-1];
                result[1] = i;
                result[2] = right[i+k];
            } 
        }
        
        return result;
    }
Plot3d 网格数据格式 PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。 阅读详情

相关推荐

基于灰度信息的图像配准方法

图像配准方法分为三种:基于灰度信息方法、基于变换域方法和基于特征方法。基于灰度信息方法是直接根据图像或图像块灰度信息进行像素上的对齐,该方法主要思想是直接最小化图像信息差异。然而,图像信息差异的判断准则衍生出不同的配准方法。常见的基于灰度信息的图像配准方法包括互相关法、互信息法和误差平方和法。本节将分别对互相关法、互信息法和误差平方和算法展开介绍,并通过MATLAB进行演示。基于灰度的图像方法容易实现,但同样存在不足。该方法对成像条件(光照,遮挡)、图像形变旋转以及噪声极其敏感,同时具有较高的计算复杂度。

weixin_42068054的博客 3775

LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays

【代码】LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays。

weixin_42383726的博客 333

告别卡顿!在RK3588上优化Gstreamer推拉流与RKNN推理的完整Pipeline实战

本文详细介绍了在RK3588平台上优化Gstreamer推拉流与RKNN推理的全链路Pipeline实战。通过解码环节参数调优、RKNN线程管理、内存预分配策略以及编码输出优化,实现60FPS流畅处理与亚秒级延迟。特别针对实时视频分析场景,提供了从rtspsrc到appsink的毫秒级优化方案,助力开发者构建零卡顿的智能视觉系统。

weixin_30698527的博客 483

C语言动态规划(2)___Maximum sum

Description Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below: Your task is to calculate d(A). Input The input consists of T( Each test case co

YzlCoder的记事本 1407

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1270

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw

业精于勤,荒于嬉 4247

1481:Maximum sum——双向dp解决超时问题

描述 Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below: t1 t2 d(A) = max{ ∑ai + ∑aj | 1 <= s1 <= t1 < s2 <= t2 <= n } i=s1 j=s2 Your task is to calcu

小白之比白更白的博客 344

[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记

最近开始学习网络安全相关知识,接触了好多新术语,感觉自己要学习的东西太多,真是学无止境,也发现了好几个默默无闻写着博客、做着开源的大神。接下来系统分享一些网络安全的自学笔记,希望读者们喜欢。 上一篇文章分享了看雪Web安全总结知识和一个异或解密的示例,本篇文章着重讲解Chrome浏览器保留密码功能渗透解析及登录加密入门笔记,结合实际例子一步步实现浏览器漏洞的挖掘。非常基础的文章,希望对入门的博友们有帮助,大神请飘过,谢谢各位看官!

杨秀璋的专栏 2万+

LeetCode每日一题(689. Maximum Sum of 3 Non-Overlapping Subarrays)

然后假设我们通过三个值,i, j, l, 将 w 分成三份, 那中间的 j 的取值范围就是 k < j < w.len() - k, 这时左边那部分的最大值就是 w[left[j-k]], 也就是从 w[0]到 w[j-k]中的最大值, 右边那部分的最大值是 w[right[j+k]], 也就是从 w[j+k]到 w[last]中的最大值, 中间部分的值是 w[j], 遍历 j, 每次将这三部分相加,取最大值即可。答案不难理解, 但是如果没有提示, 恐怕自己很难会往这个方向去想。

wangjun861205的博客 219

EtherCAT ROS2 入门教程(一)

本文介绍了EtherCAT驱动与ROS2的集成方案,主要包括三部分内容:1)在Ubuntu 22.04上安装IgH EtherCAT主站的详细步骤,包括内核配置、源码编译和网络适配器设置;2)构建ethercat_driver_ros2,通过ros2_control描述文件配置硬件接口和EtherCAT从站模块插件;3)使用方法,包括启动EtherCAT主站和运行配置包。该方案支持通过参数文件定义硬件接口,并提供通用和专用两种EtherCAT模块插件,便于开发基于EtherCAT的工业应用。

机器人控制与仿真应用 1528

【文献笔记】ICCV 2021 | Point Transformer

作者提到,特别适合点云处理,因为自注意力机制是的核心,本质上就是一个集合算子:它对输入元素具有顺序不变性和数量不变性3D点云是无序的,即使改变点云txt文件中的点顺序也不会有任何影响。自注意力机制天然具有排列不变性,因为它通过对所有"点对"的关系进行建模来处理输入,而不依赖于任何特定的输入顺序点云数据通常覆盖了3D空间中的对象或场景,理解这些数据需要捕捉点与点之间复杂的空间关系。自注意力机制能够有效的捕捉这些关系,因为它为每个"点对"赋予一个。

m0_55908255的博客 965

晨哥Leetcode 689. Maximum Sum of 3 Non-Overlapping Subarrays

In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of size k, and we want to maximize the sum of all 3*k entries. Return the result as a list of indices representing the starting positio

weixin_45588823的博客 240

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LeetCode689. Maximum Sum of 3 Non-Overlapping Subarrays(三个无重叠子数组的最大和)

三个无重叠子数组的最大和。

grllery的博客 332

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leetcode 困难题 689. Maximum Sum of 3 Non-Overlapping Subarrays 三个无重叠子数组的最大和

本文提出了一种动态规划方法求解三个无重叠子数组的最大和问题。首先计算前缀和数组和长度为k的子数组和数组KSum。通过分解问题为三个子问题:1) 计算每个位置i之后的最大子数组和maxDP;2) 计算每两个无重叠子数组的最大和dp;3) 最终求解三个子数组的最大和。该方法将时间复杂度从暴力解法的O(n³)优化至O(n),空间复杂度为O(n)。代码实现中先预处理maxDP和dp数组,最后遍历所有可能的起始位置组合得到最优解。

邹九的个人博客 490

[Swift]LeetCode689. 三个无重叠子数组的最大和 | Maximum Sum of 3 Non-Overlapping Subarrays...

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/stren...

weixin_30731287的博客 99

[LeetCode] 689. Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和

In a given arraynumsof positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of sizek, and we want to maximize the sum of all3*kentries. Return the res...

weixin_30670965的博客 118

[leetcode]689. Maximum Sum of 3 Non-Overlapping Subarrays三个非重叠子数组的最大和

In a given arraynumsof positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of sizek, and we want to maximize the sum of all3*kentries. Return the res...

weixin_30599769的博客 116

leetcode689. Maximum Sum of 3 Non-Overlapping Subarrays

In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of size k, and we want to maximize the sum of all 3*k entries. Return the res

u012707739的博客 475

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

给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/maximum-sum-of-3-non-overlapping-subarrays著作权归领扣网络所有。...

xiaolu567的博客 471

leetcode 689. Maximum Sum of 3 Non-Overlapping Subarrays 3个连续子数组最大和+动态规划DP

In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of size k, and we want to maximize the sum of all 3*k entries. Return the res...

JackZhangNJU的专栏 756

【Leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays

个不重合子区间的情况下的最大总和(递推从后向前递推,那么求方案的时候就能从前向后求字典序最小的方案)。那么全局最大总和就是。个区间的总和最大,问方案,只需给出每个区间的起点下标即可。如果方案不唯一,则返回字典序最小的那个方案。的不重合的区间,使得这。开始,先求前缀和数组。

数学、算法爱好者的博客 1076

LeetCode689. Maximum Sum of 3 Non-Overlapping Subarrays

LeetCode689. Maximum Sum of 3 Non-Overlapping Subarrays

正西风落叶下长安 2326

LeetCode //C - 689. Maximum Sum of 3 Non-Overlapping Subarrays

【代码】LeetCode //C - 689. Maximum Sum of 3 Non-Overlapping Subarrays。

Made in Code 679

LeetCode--689_Maximum_Sum_of_3_NonOverlapping_Subarrays

原题链接:点击这里 一道很水很水的背包问题? 大概算不上背包吧QAQ 自己的dp 真的是太差劲啦,以后每天一道LeetCode 备战秋招! package leetcode; public class a689_Maximum_Sum_of_3_NonOverlapping_Subarrays { public static int[] maxSumO...

dianzanji4884的博客 182

689. Maximum Sum of 3 Non-Overlapping Subarrays

689. Maximum Sum of 3 Non-Overlapping Subarrays方法1: dynamic programming易错点: In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of ...

wilzxu的博客 169

LeetCode 689 Maximum Sum of 3 Non-Overlapping Subarrays

In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum.Each subarray will be of size k, and we want to maximize the sum of all 3*k entries.Return the result ...

几百个测试用例一致通过 437
上一篇: leetcode 670. Maximum Swap(最大交换)
下一篇: leetcode 713. Subarray Product Less Than K(小于K的子数组乘积)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值