首尾相连数组的最大子数组和【单调队列】

华为OD机试 新系统真题 - 魔法阵的能量收集 华为OD机试 新系统真题【魔法阵的能量收集】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【魔法阵的能量收集】 阅读详情
题目描述:

给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。

输入:

输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1=<n<=100000),表示数组的长度,第二行依次输入n个整数(整数绝对值不大于1000)。

输出:

对于每个测试用例,请输出子数组和的最大值。

样例输入:
6
1 -2 3 5 -1 2
5
6 -1 5 4 -7
样例输出:
10
14
      此题和HDU 3415 Max Sum of Max-K-sub-sequence差不多,只不过这里的k=n(整个序列的长度)

#include<iostream>
#include<queue>
#define N 200005
using namespace std;
int n;
int a[N],sum[N];
int main()
{
	int i,j;
	int k;
	int ans;
	deque<int>q;
	while(cin>>n)
	{
	   for(i=1;i<=n;i++)
		   cin>>a[i];
	   for(j=i;j<=2*n;j++)
		   a[j]=a[j-n];
	   sum[0]=0;
	   for(i=1;i<=2*n;i++)
	     sum[i]=sum[i-1]+a[i];
       k=n;
	   ans=0;
	   q.clear();
	   for(i=1;i<=2*n;i++)
	   {
	       while(!q.empty()&&sum[q.back()]>=sum[i-1])
			   q.pop_back();
		   while(!q.empty()&&q.front()<i-k)
			   q.pop_front();
		   q.push_back(i-1);
		   if(sum[i]-sum[q.front()]>ans)
			   ans=sum[i]-sum[q.front()];
	   }
	   cout<<ans<<endl;
	}
    return 0;
}









STM32F407 HAL库 LIN DMA 配置实战与汽车电子应用解析 本文详细解析了STM32F407 HAL库在LIN总线通信中的DMA配置实战,重点介绍了硬件自动处理断点检测、同步场和校验和的优势。通过具体代码示例和汽车电子应用案例(如车窗控制、座椅调节),阐述了如何利用DMA提升通信效率与稳定性,为成本敏感的汽车电子系统提供高效解决方案。 阅读详情

相关推荐

79.ScottPlot的MVVM实现 C#例子 WPF例子

在你的 WPF 窗口的 XAML 文件中,定义一个,并将其Content属性绑定到 ViewModel 中的属性。这样可以将WpfPlot控件动态绑定到 ViewModel。

S13461120713的博客 2571

单调队列-首尾相连数组的最大子数组和

题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。...

thewebcode 318

HFSS实战:手把手教你设计微带发夹线滤波器(附完整参数计算流程)

本文详细介绍了使用HFSS设计微带发夹线滤波器的完整流程,包括参数计算、HFSS建模和优化策略。通过实战案例,帮助读者掌握微波滤波器设计的核心技巧,特别是奇偶模阻抗计算和HFSS仿真中的关键设置,适用于通信系统设计和射频工程应用。

weixin_29251567的博客 441

问题 E: 求解最长首尾公共子串-附加代码模式

注意本题为附加代码模式,main函数代码会自动附加在同学们提交的代码后面,请同学们提交代码的时候注释掉自己的main函数代码。输出其首尾最大公共子串的长度。如果该字符串只有1个字符,输出-1;否则,则可以计算其首尾最大公共子串长度并输出。输入一个长度不超过100的字符串,求解其最长首尾公共子串。一个长度不超过100的字符串。

weixin_65908362的博客 704

从零构建:Trinamic API在STM32上的深度移植与TMC-IDE通信实战

本文详细介绍了如何从零开始在STM32平台上深度移植Trinamic API,并实现与TMC-IDE工具的稳定通信。内容涵盖SPI底层驱动定制、寄存器配置、高级功能实现及调试技巧,重点解析了TMC5160芯片的集成实践,帮助开发者构建可靠的嵌入式运动控制系统。

w1x2y3的博客 254

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器)

本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。

weixin_28715953的博客 325

最大连续子序列和(最大子数组和)四种最详细的解法

问题描述:给一个数组,有正有负,求其连续子序列的最大值 解法1:穷举暴力法 枚举左端点跟右端点,然后遍历更新所有的子序列和,最终得到结果就是最大的 #include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int a[N],b[N]; int n ; int ans ; const int INF = 0...

PengWei Yang 3761

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 219

求首尾相接的数组的最大子数组和

思路:将一个数组扩大一倍,这样便实现了数组的首尾相接。在将每个数组成的子数组的和全部求出放进sum数组中,最后求出最大值即可。 源代码: package 首尾相接数组; import java.util.Scanner; public class Main {public static void main(String args[]) {/* * 生成数组 */Syste...

weixin_30872671的博客 263

【项目实战】Java9的新特性模块化(Module)

Java 9引入了模块化系统,称为"Java Platform Module System"(JPMS)这个系统允许将Java程序分成模块,每个模块都有自己的规范,可以明确地声明它依赖于哪些其他模块,并且只能访问被其所依赖的模块暴露的API。这样可以模块化就是增加了更高级别的聚合,是Package的封装体。Package是一些类路径名字的约定,而模块是一个或多个Package组成的封装体。

奶爸的编程之路,也就一周冷个三天 1896

一文吃透 SAP HANA JSON Document Store:从架构到实战的完整指南

本文详细介绍了SAP HANA的JSON Document Store功能,包括其定位、架构、典型场景以及具体使用方法。文章首先分析了半结构化数据场景下传统关系模型的局限性,说明Document Store如何通过集合(Collection)存储JSON文档来提供灵活性。随后详细阐述了启用方式、SQL语法、与Column Store的联动机制,并提供了大量可直接复用的实战案例。特别强调了Document Store作为HANA内建服务的优势,包括企业级一致性、备份恢复等能力。最后给出了数据类型处理和跨引擎协

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

结对开发四--首尾相连得数组的最大子数组的和

一、设计思路   根据上一个结对开发的基础上,将数组的首尾可以连接起来,组成一个首尾相联的数组,也就是说,每一个元素都能当作是数组的第一个元素, 因此,就可以根据有几个元素,就定义几个数组,让每一个元素都能成为元素的第一个元素,来得出每一个数组的最大子数组的和,那么怎么构造 每一个数组呢?   可以用冒泡交换,就是根据冒泡排序的原理,将数组的最后一个元素转移到数组的第一个元素的位置,然后就...

weixin_30920091的博客 166

ESP32 DW1000 UWB 室内定位系统

详细介绍ESP32 DW1000 UWB 室内定位系统的设计演示demo。

DT程序员的博客 1662

HDU-3415 Max Sum of Max-K-sub-sequence 单调队列

这题就是考察了一个单调队列,做的时候要注意由于首尾相连,所以我们就扩出一倍的空间来简化这个过程。 定义f[j]表示在第j号位置结束的连续长度不超过k的最大和,那么f[j] = MAX( sum[j] - sum[k] ),其中就要求满足区间要求,由于每个点都是从前面的sum[k]得来的,所以就可以用一个单调队列来进行同步更新。详见代码: #include <cstdlib> ...

weixin_34419326的博客 74

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ABAQUS插件开发避坑指南:从挂载到热调试的完整流程

本文详细解析了ABAQUS插件开发的完整流程,从环境搭建到热调试技巧,帮助开发者避开常见陷阱。重点介绍了双环境协作体系、插件架构设计、挂载机制选择以及热调试工具的高级用法,提升开发效率和稳定性。适用于需要进行ABAQUS二次开发的工程师和研究人员。

weixin_30296405的博客 389

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣918——环形子数组的最大和(前缀和+单调队列,动态规划)

前缀和+单调队列 连续子数组,想到前缀和,限制长度,想到用单调队列维护 仔细读题,不难得出,环形数组C,其实是两个A首尾相连,而其满足题意的子数组长度不能超过n; 直观的想法,先构造出数组C,通过前缀和求某一范围内的子数组和,在范围不超过n的所有子数组中,最大值就是答案。 范围i到j的子数组和就是sum[j]−sum[i]sum[j]-sum[i]sum[j]−sum[i]; 对于某一位置x,其对应的最大子数组为 x往前不超过n的某下标 到 x 这一子数组,而对应的某下标,即是范围内前缀和最小的那个下...

lllzzzhhh2589的记录 699

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法中子数组问题详解,多种解法,包含对应题目!

问题类型典型解法时间复杂度最大子数组和Kadane 算法O(n)固定长度子数组极值滑动窗口 + 单调队列O(n)子数组和等于k前缀和 + 哈希表O(n)最长无重复子数组滑动窗口 + 哈希表O(n)关键技巧滑动窗口:适用于连续子数组的最值、计数问题。前缀和:用于快速计算子数组和。哈希表:存储中间结果,优化查找。问题类型Java 解法时间复杂度最大子数组和Kadane 算法O(n)滑动窗口最大值单调队列(DequeO(n)子数组和等于 K前缀和 +HashMapO(n)最长无重复子串。

weixin_52580607的博客 833

hdu3415Max Sum of Max-K-sub-sequence(单调队列)

->题目请戳这里 题目大意:给n个数,这n个数首尾相连。求一个长度为不超过k的连续子序列最大和。并求出起始和终止位置。 题目分析:求某段连续区间和的最大值,单调队列解决。具体做法是:先求出sum[1]到sum[n],我们考虑第i个数,用一个单调队列维护sum[i - k]到sum[i - 1]的最小值,设这个最小值是sum[j],那么sum[i] - sum[j]就是j到i的这个区间的最大连续

ophunter的专栏 1133

CodeTop 热门算法题精解:动态规划与双指针实战指南

本文深入解析CodeTop热门算法题,重点探讨动态规划与双指针的核心技巧。通过最大子数组和、三数之和等经典例题,详细讲解状态转移方程、空间优化及去重策略,帮助读者高效应对力扣hot100等算法笔试挑战。

apple5的专栏 867

hud 3415 Max Sum of Max-K-sub-sequence

题目 http://acm.hdu.edu.cn/showproblem.php?pid=3415 分析 做的时候要注意由于首尾相连,所以我们就扩出一倍的空间来简化这个过程。 最朴素的做法,在处理第i个元素的时候,将以i开始的长度为1...K的所有情况算一遍然后和以前存储的结果比较,保存中间结果,此时时间复杂度为O(N*K),很显然会超时,需要另想办法优化。 考虑到最朴素的做法中可以使用

qiusuo800的专栏 722

动态规划从入门到精通:基于leetcode-js项目的完整指南

动态规划是算法领域中一种高效的问题解决方法,尤其在处理最优子结构和重叠子问题时表现出色。本文将通过gh_mirrors/leet/leetcode-js项目中的2000+ JavaScript解决方案,带你从入门到精通动态规划,掌握这一算法利器的核心思想与实战技巧。 ## 什么是动态规划? 动态规划(Dynamic Programming,简称DP)是一种通过将复杂问题分解为重叠子问题,并存储

gitblog_00056的博客 426

滑动窗口(Sliding Window)算法题型全面总结

通过左右指针动态维护窗口,避免重复计算。

hello world/linux 1268

滑动窗口算法与单调队列:从原理到蓝桥杯国赛实战解析

滑动窗口算法是处理数组或序列上连续子区间问题的核心技巧,其核心原理在于利用相邻窗口间的重叠部分,通过增量更新避免重复计算,从而将时间复杂度优化至O(n)。这一思想在数据处理、实时监控和流式计算中具有重要技术价值,尤其适用于求解固定长度子数组的统计量,如最大值、最小值或和。在工程实践中,单调队列是高效维护滑动窗口内极值的关键数据结构,通过维护元素的单调性,确保队首始终为当前窗口的最值。本文结合蓝桥杯国赛真题,深入解析了滑动窗口与单调队列的实现细节、常见变体及调试技巧,为算法竞赛和工程应用提供扎实的解决方案。

weixin_30514745的博客 397

算法基础 典型题 滑动窗口

记录算法基础题思路: step1 最长回文长度:https://leetcode-cn.com/problems/longest-palindrome/submissions/ int longestPalindrome(string s) { /* 利用hash表统计全部字符数量,然后遍历每一个字符 如果为偶数length+=count,...

runafterhit的博客 465
上一篇: HDU 3415 Max Sum of Max-K-sub-sequence【单调队列】
下一篇: HDU 4258 Covered Walkway【单调队列斜率优化】
Job_yi
博客等级 码龄14年 6粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值