Leetcode 第 120 场双周赛 Problem C 统计移除递增子数组的数目 II(Java + 双指针 + 前缀和)

题目

  • 统计移除递增子数组的数目 II
  • 给你一个下标从 0 开始的 正 整数数组 nums 。
  • 如果 nums 的一个子数组满足:移除这个子数组后剩余元素 严格递增 ,那么我们称这个子数组为 移除递增 子数组。比方说,[5, 3, 4, 6, 7] 中的 [3, 4] 是一个移除递增子数组,因为移除该子数组后,[5, 3, 4, 6, 7] 变为 [5, 6, 7] ,是严格递增的。
  • 请你返回 nums 中 移除递增 子数组的总数目。
  • 注意 ,剩余元素为空的数组也视为是递增的。
  • 子数组 指的是一个数组中一段连续的元素序列。
  • 1 <= nums.length <= 10 ^ 5
  • 1 <= nums[i] <= 10 ^ 9

解法

Java + 双指针 + 前缀和:

第 1 步:

  • 分析题意可得,如果移除区间 [x,y] 后剩下为递增数组,那么移除 [x-1,y]、[x-2,y]… 后也剩下递增数组,
  • 因此我们想到枚举每个 y,找到最大的 x,然后 [0,x] 均可作为移除的左区间

第 2 步:

  • 从左往右枚举 y 时,x 满足条件需要
    1. [y+1, n-1] 为递增数组
    2. [0,x-1] 也为自增数组
    3. nums[x-1] < nums[y+1]
  • 根据上述可以发现 y 增大时,最大的 x 要么不变、要么增加,使用双指针的方式求解

第 3 步:

  • 具体做法:
  • 预处理前缀与后缀是否满足严格递增,
  • 枚举 y 时,如果前缀与后缀均递增,找到最大的 x,
  • 可以删除 [0,y] … [x,y],因此答案加上 x+1
  • 时间复杂度:O(n),空间复杂度:O(n)

代码

    /*** Java + 双指针 + 前缀和:** 第 1 步:* 分析题意可得,如果移除区间 [x,y] 后剩下为递增数组,那么移除 [x-1,y]、[x-2,y]... 后也剩下递增数组,* 因此我们想到枚举每个 y,找到最大的 x,然后 [0,x] 均可作为移除的左区间** 第 2 步:* 从左往右枚举 y 时,x 满足条件需要*     1. [y+1, n-1] 为递增数组*     2. [0,x-1] 也为自增数组*     3. nums[x-1] < nums[y+1]* 根据上述可以发现 y 增大时,最大的 x 要么不变、要么增加,使用双指针的方式求解** 第 3 步:* 具体做法:* 预处理前缀与后缀是否满足严格递增,* 枚举 y 时,如果前缀与后缀均递增,找到最大的 x,* 可以删除 [0,y] ... [x,y],因此答案加上 x+1** 时间复杂度:O(n),空间复杂度:O(n)**/public long incremovableSubarrayCount(int[] nums) {int n = nums.length;// 前缀 [0,i] 是否为递增数组boolean[] prefix = new boolean[n];prefix[0] = true;for (int i = 1; i < n; i++) {if (nums[i] > nums[i - 1]) {prefix[i] = true;} else {break;}}// 后缀 [i,n-1] 是否为递增数组,为方便处理多加一个 nboolean[] suffix = new boolean[n + 1];suffix[n] = true;suffix[n - 1] = true;for (int i = n - 2; i >= 0; i--) {if (nums[i] < nums[i + 1]) {suffix[i] = true;} else {break;}}long res = 0L;// 枚举移除的右端点时,最大的左端点值int maxLeft = 0;for (int right = 0; right < n; right++) {// 左端点小于右端点,左端点递增,右端点后面递增,右端点后面均大于左端点while (right > maxLeft && prefix[maxLeft] && suffix[right + 1]&& (right == n - 1 || nums[right + 1] > nums[maxLeft])) {maxLeft++;}// maxLeft++ 时已经保证了左端点递增,因此只需要看右端点后面递增即可if (suffix[right + 1]) {res += maxLeft + 1;}}return res;}

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

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

相关文章

助力打造清洁环境,基于YOLOv4开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题&#xff0c;公共环境下垃圾投放点都会有固定的值班时间&#xff0c;但是考虑到实际扔垃圾的无规律性&#xff0c;往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题&#xff0c;有些容易扩散的垃圾比…

【UML】第12篇 序列图(1/2)——基本概念和构成

目录 一、什么是序列图&#xff08;Sequence Diagram&#xff09; 1.1 定义 1.2 主要用途 1.3 序列图和BPMN的区别和联系 二、序列图的构成 2.1 对象 2.2 生命线 2.3 消息 2.4 激活 序列图&#xff0c;是我个人认为的用处最多的一种图。产品和研发的同学&#xff0c;都…

向量投影:如何将一个向量投影到矩阵的行向量生成子空间?

向量投影&#xff1a;如何将一个向量投影到矩阵的行向量生成子空间&#xff1f; 前言 本问题是在学习Rosen梯度投影优化方法的时候遇到的问题&#xff0c;主要是对于正交投影矩阵(NT(NNT)-1N)的不理解&#xff0c;因此经过查阅资料&#xff0c;学习了关于向量投影的知识&…

【Datawhale x 财务学习笔记】用智谱清言的代码沙盒进行分析

体验网址 智谱清言&#xff1a;https://chatglm.cn/ prompt 帮我分析一下这个excel文件&#xff0c;从财务角度给出利润情况&#xff0c;并给出优化建议体验结果 首先&#xff0c;我将查看上传的Excel文件的内容&#xff0c;以便了解其结构和包含的数据。然后&#xff0c;我…

MySQL8主主搭建

-- mysql8 主主搭建 mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz 主1 &#xff1a; 192.168.2.160 主2 &#xff1a; 192.168.2.161 --解压mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz为mysql8 -- 初始化mysql8 &#xff08;略&#xff09; -- 参数192.168.2.160 [root…

相机内参标定理论篇------张正友标定法

一、为什么做相机标定&#xff1f; 标定是为了得到相机坐标系下的点和图像像素点的映射关系&#xff0c;为摄影几何、计算机视觉等应用做准备。 二、为什么需要张正友标定法&#xff1f; 张正友标定法使手工标定相机成为可能&#xff0c;使相机标定不再需要精密的设备帮助。…

7种常见的网络安全设备及其功能

网络安全设备在现代网络环境中起着至关重要的作用&#xff0c;帮助保护个人和组织免受恶意攻击。本文将介绍7种常见的网络安全设备&#xff0c;包括防火墙、入侵检测系统、反病毒软件、数据加密设备、虚拟私人网络、安全信息和事件管理系统以及网络访问控制设备&#xff0c;并详…

junit-mock-dubbo

dubbo单元测试分两种情况 Autowired注解是启动上下文环境&#xff0c;使用上下文对象进行测试&#xff0c;适合调试代码 InjectMocks注解是启动上下文环境&#xff0c;使用mock对象替换上下文对象&#xff0c;适合单元测试 BaseTest *** Created by Luohh on 2023/2/10*/ S…

8、优化服务器设置

Mysql配置的工作原理 首先我们应该知道的是Mysql从哪里获取配置信息&#xff1a;命令行参数和配置文件。如果打算长期使用某些配置那么就应该写到全局配置文件&#xff0c;而不是在命令行指定。 语法、作用域和动态性 配置项设置都使用小写&#xff0c;单词之间用下划线或者…

Torchvision中的Transforms的使用

一、transforms结构及用法 查看tansforms.py说明文档&#xff1a; ToTensor类作用是&#xff1a;将一个PIL图片或numpy形式转换成tensor的数据类型 python的用法-》tensor数据类型 通过 transforms.ToTensor去看两个问题 1、transforms该如何使用(python) 2、为什么我们需要Te…

碳排放预测 | 基于ARIMA和GM(1,1)的碳排放预测(Matlab)

目录 预测效果基本介绍模型描述ARIMA模型GM(1,1)模型 程序设计参考资料 预测效果 基本介绍 基于ARIMA和GM(1,1)的碳排放预测&#xff08;Matlab&#xff09; 基于ARIMA&#xff08;自回归移动平均模型&#xff09;和GM(1,1)&#xff08;灰色预测模型&#xff09;的碳排放预测是…

GO语言基础笔记(二):控制结构与函数

1. 控制结构 1.1 if-else 结构 基本形式&#xff1a;if 条件判断后跟着一个代码块。如果条件为真&#xff0c;则执行该代码块。else 语句&#xff1a;紧随 if 代码块后面&#xff0c;当 if 条件不成立时执行。else if&#xff1a;可以在 if 和 else 之间添加更多的条件判断。…

Pinely Round 3 (Div. 1 + Div. 2)(A~D)(有意思的题)

A - Distinct Buttons 题意&#xff1a; 思路&#xff1a;模拟从&#xff08;0,0&#xff09;到每个位置需要哪些操作&#xff0c;如果总共需要4种操作就输出NO。 // Problem: A. Distinct Buttons // Contest: Codeforces - Pinely Round 3 (Div. 1 Div. 2) // URL: https…

【docker笔记】docker理论及安装

前言 本笔记来源于尚硅谷docker教学视频 视频地址&#xff1a;https://www.bilibili.com/video/BV1gr4y1U7CY/?spm_id_from333.337.search-card.all.click 纯手打笔记&#xff0c;来之不易&#xff0c;感谢支持~ Docker简介 docker为什么会出现 想象一下&#xff1a;一个应用…

Python遥感影像深度学习指南(1)-使用卷积神经网络(CNN、U-Net)和 FastAI进行简单云层检测

【遥感影像深度学习】系列的第一章,Python遥感影像深度学习的入门课程,介绍如何使用卷积神经网络(CNN)从卫星图像中分割云层 1、数据集 在本项目中,我们将使用 Kaggle 提供的 38-Cloud Segmentation in Satellite Images数据集。 该数据集由裁剪成 384x384 (适用…

第1课 配置FFmpeg+OpenCV开发环境

一、配置开发环境 1.下载FFmpegOpenCV开发所用的SDK压缩包&#xff0c;并解压到E:\SDK下&#xff0c;解压后的路径应为&#xff1a;E:\SDK\ffmpeg-sdk\58\x86\dll及E:\SDK\opencv-sdk\340\x86\dll。 2.新建VC项目&#xff0c;名称为demo1&#xff0c;项目类弄为MFC应用程序&a…

CentOS中docker安装及镜像源配置

1、首先配置docker的阿里yum源 cat >/etc/yum.repos.d/docker.repo<<EOF [docker-ce-edge] nameDocker CE Edge - \$basearch baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge enabled1 gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/do…

第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。 OK&#xff0c;到目前为止&#xff0c;我们的服务顺利容器化并上了K8s&#xff0c;同时也能通过外部网络进行请求访问&#xff0c;相关的服务数据也能进行持久化存储了&#xff0c;那么接下来…

【新版】软考 - 系统架构设计师(总结笔记)

个人总结学习笔记&#xff0c;仅供参考&#xff01;&#xff01;&#xff01;! →点击 笔者主页&#xff0c;欢迎关注哦&#xff08;互相学习&#xff0c;共同成长&#xff09; 笔记目录 &#x1f4e2;【系统架构设计系列】系统架构设计专业技能 计算机组成与结构操作系统信…

【PostgreSQL】从零开始:(二十五)数据类型-比特类型

比特类型 比特类型是计算机中存储和处理数据的基本单位&#xff0c;它表示计算机中最小的可寻址的存储单元。一个比特只能表示0或1&#xff0c;可以用来表示二进制数。多个比特可以组合成更复杂的数据类型&#xff0c;例如字节&#xff08;byte&#xff09;、字&#xff08;wo…