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

news2024/12/21 18:44:22

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个整数数组 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

解题思路:

* 解题思路:
* 这题看长度,应该是一个n2时间复杂度的题目。
* 首先求出前缀和,这样就方便求出某个区间的和。
* 然后就可以遍历nums数组,分别枚举firstLen长度的子数组求和,然后确定firstLen的位置后,在在剩余的空间内枚举所有secondLen长度子数组求和。
* 求出两者之和最大的那个就是本题的目标值。

代码:

public class Solution1031 {

    public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) {
        int[] prefixSum = new int[nums.length + 1];
        prefixSum[0] = 0;
        for (int i = 0; i < nums.length; i++) {
            prefixSum[i + 1] = prefixSum[i] + nums[i];
        }
        int maxSum = 0;
        for (int i = firstLen; i < prefixSum.length; i++) {
            for (int j = secondLen; j < prefixSum.length; j++) {
                //如果有重叠,则continue
                boolean flag = j - secondLen >= i;
                flag |= j <= i - firstLen;
                if (!flag) {
                    continue;
                }
                int sum1 = prefixSum[i] - prefixSum[i - firstLen];
                int sum2 = prefixSum[j] - prefixSum[j - secondLen];
                maxSum = Math.max(sum1 + sum2, maxSum);
            }
        }
        return maxSum;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/473944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++内存管理基础

文章目录 前言1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new与operator delete函数4.1 operator new与operator delete函数&#xff08;重点&#xff09; 5. new和delete的实现原理5.1…

hana odata batch

sap 博客有写 odata batch 处理前&#xff0c;先看一张图 In this blog post,we are going to see how to send a Odata Batch Request to the SAP Cloud for Customer system using POSTMAN Tool. Answers to expect from this post? How to use batch request in the POS…

『python爬虫』04. 爬虫需要知道的HTTP协议知识(保姆级图文)

目录 1. HTTP协议是什么&#xff1f;2. HTTP协议结构3. 爬⾍需要的请求头和响应头内容总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1. HTTP协议是什么&#xff1f; HTTP协议, Hyper Text Transfer Protocol…

2023独立站能不能做FP?看完这篇你就懂了

现在已经快2023年中了&#xff0c;2023年已经过去了1/3&#xff0c;但还是有人在问特货产品能不能做独立站&#xff0c;还是有不少人在观望。心动不如行动啊朋友们&#xff01;要是想在跨境独立站做出一番事业来&#xff0c;建议现在立马行动起来&#xff0c;趁早在FP独立站领域…

工厂能耗管理系统linux嵌入式边缘网关

随着工业智能化进程的不断推进&#xff0c;能源能耗管理已成为企业经营中一个重要的环节。而在能源能耗管理场景下&#xff0c;边缘计算机发挥了越来越重要的角色。本文将介绍边缘计算机的功能特点、能源能耗使用对接的设备以及应用前景市场容量&#xff0c;并探讨ARM边缘计算机…

Java使用 Scanner连续输入int, String 异常错误输出原因分析

目录 一、Scanner常用语法 1、sc.nextInt()介绍 2、sc.next()介绍 3、sc.nextLine()介绍 4、sc.hasNext()介绍 二、报错案例 1、使用next()来接收带有空格的字符串会输出异常 2、先输入数字再输入字符串的输出异常 一、Scanner常用语法 Scanner sc new Scanner(System.…

STM32物联网实战开发(2)——回调函数

在第一篇博客中提到了全新的程序框架&#xff0c;我们会大量的使用回调函数&#xff0c;其中包括枚举类型、结构体、函数指针的应用。 回调函数&#xff1a;就是一个通过函数指针调用的函数。如果你把函数的地址传递给中间函数的形参&#xff0c;中间函数通过函数指针调用其所…

【VM服务管家】VM4.0软件使用_1.3全局模块类

目录 1.3.1 通讯管理&#xff1a;通讯管理的心跳管理功能的使用方法1.3.2 全局触发&#xff1a;使用全局触发功能执行流程的方法1.3.3 全局变量&#xff1a;全局变量关联流程中具体模块结果的方法1.3.4 全局脚本&#xff1a;方案加载完成信号发给通信设备的方法1.3.5 全局脚本&…

我做了个GPT3键盘,用了两个月发现它有点傻

自 ChatGPT 出世&#xff0c;各类文本类AI产品层出不穷。甚至接连几日&#xff0c;Producthunt 上新品过半都是AI相关。 这其中部分原因是 OpenAI 公司开放的 GPT3 1API 接口十分易用。只要一个简单的文本请求&#xff0c;就能将现有产品加入AI功能。例如&#xff0c;Notion、…

Docker在Windows系统中的安装方法和使用方法

Docker在Windows系统中的安装方法和使用方法 Docker是一种容器化技术&#xff0c;可以让开发者将应用程序和其依赖项打包成一个可移植的容器&#xff0c;从而实现快速部署和运行。在Windows系统中&#xff0c;Docker可以通过以下步骤进行安装和使用。 优点&#xff1a; Dock…

【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类

目录 3.3.1 位置修正&#xff1a;位置修正算子工具的使用方法3.3.2 模板保存&#xff1a;实现模板自动加载的方法3.3.3 模板匹配&#xff1a; 获取模板匹配框和轮廓点的方法3.3.4 模板训练&#xff1a;模板训练执行完成的判断方法3.3.5 图像相减&#xff1a;算子SDK开发图像相减…

浅谈软件质量与度量

本文从研发角度探讨下高质量软件应具备哪些特点&#xff0c;以及如何度量软件质量。 软件质量的分类 软件质量通常可以分为&#xff1a;内部质量和外部质量。 内部质量 内部质量是指软件的结构和代码质量&#xff0c;以及其是否适合维护、扩展和重构。它关注的是软件本身的…

数据结构 | 常见的数据结构是怎样的?

本文简单总结数据结构的概念及常见的数据结构种类 1’ 2。 更新&#xff1a;2023 / 04 / 05 数据结构 | 常见的数据结构是怎样的&#xff1f; 总览概念分类 常用的数据结构数组链表跳表栈队列树二叉树完全二叉树、满二叉树 平衡二叉树单旋转左旋右旋 红黑树红黑树 V.S 平衡二叉…

2 天:我用文字 AI-ChatGPT 写了绘画 AI-Stable Diffusion 跨平台绘画应用

文本 AI - ChatGPT 和绘画 AI - Stable Diffusion&#xff0c;平地惊雷&#xff0c;突然进入寻常百姓家。 如果时间可以快进&#xff0c;未来的人们对于我们这段时光的历史评价&#xff0c;大概会说&#xff1a; 当时的人们在短时间连续经历了这几种情感。从不信&#xff0c;…

java多线程BlockingDeque的三种线程安全正确退出方法

本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程&#xff0c;每个线程内逻辑时&#xff0c;判断BlockingDeque任务是否处理完&#xff0c;处理完退出&#xff0c;还有任务就BlockingDe…

对顶堆模板!!【DS对顶堆】ABC281 E - Least Elements

我想的思路和正解是差不多的 就是滑动窗口&#xff0c;每过去一个用DS维护一下前k个元素和sum 本来想的是用优先队列维护前k个 然后想着multiset维护前k个&#xff0c;但是具体不知道怎么操作 这里用的是multiset维护对顶堆 关于对顶堆&#xff0c;我在寒假的时候总结过 …

【Java笔试强训】(1)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f9be;&#x1f9be;&#x1f9be; 目录 一、选择题 二、编程题 &#x1f525;组队竞…

Github创建一个新仓库,关联本地数据并上传文件的图文步骤

工作中&#xff0c;我们经常会使用github来承享别人的代码果实&#xff0c;同时我们也会把自己的成果分享给别人&#xff0c;互相帮助。 今天的这篇图文教程非常重要&#xff0c;目标是使用Github来创建一个远程仓库&#xff0c;并和本地仓库对接&#xff0c;同时要做上传新内容…

初始Vue3【Vue3】

1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/releases/tag/v3.0.0 …

使用docker容器化部署mysql8.0.27,并更改其默认端口3306为3306全流程记录。

使用docker容器化部署mysql8.0.27,并更改其默认端口3306为3306全流程记录。 1.创建镜像 #查看镜像 docker images|grep mysql #搜索镜像 docker search mysql #拉取镜像 docker pull mysql&#xff1a;latest #运行镜像&#xff0c;--name 后的参数自己命名&#xff0c;我的数…