LeetCode918 环形子数组最大值

news2024/9/27 5:45:06

这里写自定义目录标题


题目:

在这里插入图片描述

思路:
1、破环成链。

由于是环形数组,则数组的末端会与开头相连呈环状。

只需要将长度为N的数组拷贝一次,拼接在原数组后,即得到长度为2N的数组,该数组即为环形数组。

如:原数组为123,则原数组为环形数组123123的子集。

2、前缀和。

要求环形数组中子数组的最大和,只需要求长度为2N的数组中长度不超过N的子数组的最大和。

构造前缀和后,求前缀和,即以右端点i与左端点j + 1所构成的子数组的最大和为Si - Sj 。
例:
[1,2,3,4]

构造前缀和:
[0,1,3,6,10]

子数组最大和:
10-0 = 10

3、单调队列(滑动窗口)。

滑动窗口的左端点为j,右端点为i,但需要维护j + 1到i,故窗口长度为i - j + 1 - 1 → i - j ≤ N。

由于求Si - Sj 最大,且Si是固定值,故Sj应该最小,即滑动窗口维护区间 S(j, i] 的最小值。

代码:

class Solution {
    public int maxSubarraySumCircular(int[] nums) {
        int n = nums.length, m = n << 1;
        int[] sum = new int[m + 1];
        for (int i = 1; i <= m; ++i) {
            sum[i] = sum[i - 1] + nums[(i - 1) % n];
        }
        Deque<Integer> q = new LinkedList<>();    // 注意边界条件下标0
        q.add(0);
        int max = nums[0];
        for (int i = 1; i <= m; ++i) {
            if (!q.isEmpty() && q.peek() < i - n) {  // i-n 为窗口左边界,超过边界弹出一个元素。注意:这里deque里存的是下标
                q.poll();
            }
            max = Math.max(max, sum[i] - sum[q.peek()]);  
            while (!q.isEmpty() && sum[q.peekLast()] > sum[i]) { // TODO:待分析,这里注意循环的终止条件为sum[peekLas]<=sum[i]。也就是说,和比当前小的都不要,说明插入了负数。**
                q.pollLast();
            }
            q.add(i);
        }
        return max;
    }
}


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

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

相关文章

mars3d的api文档关于addDynamicPosition查找使用说明

示例链接&#xff1a;功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 api地址&#xff1a;Mars3D三维可视化平台 | 火星科技 说明&#xff1a; 1.用户反馈不知道如何搜索这个属性的用法 说明&#xff1a; 1. 示例代码中的graphic.addDynamicPosition()说明这个addDynam…

electron 升级 v22 遇到问题

Electron 漏洞 https://mp.weixin.qq.com/s/5LpSJb_5uV8EIDOl3fz9Tw 由于 23以上不在支持win 7 8 8.1 所以我选择安装 v22.3.24 electron 22.3.24 node-sass 6.0.1 sass-loader 10.4.1 对应的版本 npm i node-sass6.0.1 --sass_binary_sitehttps://npm.taobao.org/mirrors…

vscode安装svn扩展(windows)

一、安装 1.1 环境说明 操作系统 windows 10 1.2 安装过程 1. 安装svn 双击安装程序 点击next 继续next 继续next 点击Install 在弹出框中点击 是 开始安装进度&#xff0c;一会将安装成功 安装结束 右键菜单栏中已经有svn选项&#xff0c;并且能正常拉取以…

一区TOP期刊提出一种植被覆盖度估算新方法

研究背景&#xff1a;光合植被(PV)主要指绿色的叶片&#xff0c;而非光合植被(NPV)包括凋落物和茎等。利用遥感数据估算植被覆盖(FVC)主要有三种方法&#xff1a;1) 回归模型2&#xff09;光谱混合物分析(SMA) 3) 数据驱动的模型。在这三种方法中&#xff0c;回归模型因其简单性…

网络安全--APT技术、密码学

目录 1. 什么是APT&#xff1f; 2. APT 的攻击过程&#xff1f; 3. 详细说明APT的防御技术 4. 什么是对称加密&#xff1f; 5. 什么是非对称加密&#xff1f; 6. 私密性的密码学应用&#xff1f; 7. 非对称加密如何解决身份认证问题&#xff1f; 8. 如何解决公钥身份认…

这篇被吹爆了的职称评审个人专业技术业务工作总结范文模板,不看就是你的损失了

职称评审需要写个人工作总结吗&#xff1f;甘建二告诉你毫无疑问&#xff0c;肯定是必须要的&#xff0c;对于评职称的人来说&#xff0c;准备一篇几千字的工作技术总结&#xff0c;是必不可少的申报材料之一。甚至对于初级职称评审来说&#xff0c;个人专业技术总结决定了一个…

三战时区问题

一、前言 前两天测试向我反馈生产环境挖机进口日期页面上展示的比数据库中存储的早了一天&#xff0c;但在测试环境是正常的&#xff0c;并且其它时间字段都没有任何问题&#xff0c;很是奇怪&#xff0c;安排开发排查没有头绪&#xff0c;然后我自己登录生产环境确认LInux系统…

别再瞎考证了,从事网络安全工作,这五大证书是加分项!

其他行业&#xff0c;对证书的要求可能并不明显&#xff0c;但在信息安全类的岗位中&#xff0c;大部分招聘信息中明确标明持有NISP、CISP等网络安全相关资质证书优先等。因此想要快速进入网络安全行业&#xff0c;通过学习并考取相关证书&#xff0c;是一个很不错的途径。 那么…

flutter开发实战-Universal Links配置及flutter微信分享实现

flutter开发实战-Universal Links配置及flutter微信分享实现 在最近开发中碰到了需要实现微信分享&#xff0c;在iOS端需要配置UniversalLink&#xff0c;在分享使用fluwx插件来实现微信分享功能。 一、配置UniversalLink 1.1、什么是UniversalLink Universal link 是Apple…

Vue中的router路由的介绍(快速入门)

路由的介绍 文章目录 路由的介绍1、VueRouter的介绍2、VueRouter的使用&#xff08;52&#xff09;2.1、5个基础步骤(固定)2.2、两个核心步骤 3、组件存放的目录&#xff08;组件分类&#xff09; 生活中的路由&#xff1a;设备和ip的映射关系&#xff08;路由器&#xff09; V…

管网水位监测仪:井下水位监测的创新者

随着城市化进程的不断推进&#xff0c;城市排水管网系统的完善和安全运行越来越受到社会和政府的关注。近期&#xff0c;国家加大了对城市基础设施建设的投入力度&#xff0c;推动了排水管网系统的升级和改造。在这样的背景下&#xff0c;万宾科技推出了一款全新的产品——管网…

canvas力导布局

老规矩&#xff0c;先上效果图 <html><head><style>* {margin: 0;padding: 0;}canvas {display: block;width: 100%;height: 100%;background: #000;}</style> </head><body><canvas id"network"></canvas> </…

1600*C. k-Tree(DP)

Problem - 431C - Codeforces 解析&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long const int mod1e97,N110; int n,k,d,dp[N][2]; signed main(){scanf("%lld%lld%lld",&n,&k,&d);dp[0][0]1;for(int i1;i<n;…

Elasticsearch基础篇(四):Elasticsearch的基础介绍与索引设置

Elasticsearch的基础介绍与索引设置 一、Elasticsearch概述Elasticsearch简介什么是全文检索引擎Elasticsearch 应用案例 二、索引和文档的概念1. 索引&#xff08;Index&#xff09;2. 文档&#xff08;Document&#xff09; 三、倒排索引&#xff08;Inverted Index&#xff…

2.3 为何使用Pthreads

轻量 和进程相比&#xff0c;系统在创建和管理线程时的开销要小的多&#xff0c;这里通过比较调用fork()创建进程和pthread_create()创建线程时的耗时开销来说明。下表中的耗时为执行了50000次创建操作对应的耗时&#xff0c;单位为秒。 注意&#xff1a;由于是在具有多核的对称…

Pro有Pro的样,但适合是最好的!iPhone 15与15 Pro应该买哪一款

你正在考虑升级到最近发布的iPhone 15系列,但你不确定你应该选择iPhone 15还是iPhone 15 Pro。以下是两款手机的功能以及高级Pro升级功能。 从性能和摄像头功能到设计和定价,我们正在挖掘每一个差异,以便你能够根据自己的需求和预算选择最佳手机。 iPhone 15与iPhone 15 P…

el-form简单封装一个列表页中的搜索栏

父组件如何使用 代码中注释很多, 应该很容易理解 <template><div><wgySearchv-model"searchDefault":fields"searchFields"reset"reset"submit"submit"><!-- 通过 slot 自定义的组件 传啥都行 --><te…

段码屏学习

文章目录 1.液晶屏和OLED屏2.液晶屏原理3.码段屏原理4.单色点阵屏原理5.彩色点阵屏原理6.HT1621驱动LCD段码屏 1.液晶屏和OLED屏 答&#xff1a; 液晶屏&#xff1a;码段屏、单色点阵屏、彩色点阵屏。 OLED屏&#xff1a;消费类电子产品多&#xff0c;贵。 2.液晶屏原理 …

三相智能电表逆相序的原因及解决方法

随着电力系统的快速发展&#xff0c;智能电表已逐渐替代传统电表&#xff0c;成为我国电力系统的重要组成部分。在众多类型的智能电表中&#xff0c;三相智能电表以其高精度、稳定性和智能化程度&#xff0c;被广泛应用于工商业及居民用电领域。然而&#xff0c;在使用过程中&a…

许战海战略文库|主品牌老化:企业增长面临的关键挑战

在今天&#xff0c;大部分行业的竞争环境已经从匀速变化迭代为加速变化&#xff0c;主品牌老化成为企业增 长面临的重要挑战&#xff0c;这一点已经变得非常明显。技术革新、产业革命以及顾客需求的演变势不 可挡&#xff0c;跨周期竞争已经成为常态。在这种情况下&#xff0c;…