LeetCode-795-区间子数组个数

news2025/1/18 10:04:48

在这里插入图片描述

1、双指针

根据题意,我们可以将数组中的数分为这三类:1、小于 l e f t left left的数;2、大于等于 l e f t left left且小于等于 r i g h t right right的数;3、大于 r i g h t right right的数。因此若我们使用双指针来维护区间 [ l a s t 2 , l a s t 1 ] [last2,last1] [last2,last1],其中我们让 l a s t 1 last1 last1指向大于等于 l e f t left left且小于等于 r i g h t right right的数, l a s t 2 last2 last2指向大于 r i g h t right right的数。因此当我们遍历每个位置 i i i时,此时区间右顶点固定在 i i i,左区间顶点可以落在 ( l a s t 2 , l a s t 1 ] (last2,last1] (last2,last1]中,我们只要统计左区间顶点可能的个数即可。

class Solution {
public:
    int numSubarrayBoundedMax(vector<int>& nums, int left, int right) {
        int res = 0, last2 = -1, last1 = -1;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] >= left && nums[i] <= right) {
                last1 = i;
            } else if (nums[i] > right) {
                last2 = i;
                last1 = -1;
            }
            if (last1 != -1) {
                res += last1 - last2;
            }
        }
        return res;
    }
};

2、双指针优化

由于我们在方法一中所求的区间个数实质上是不包含第三类且至少包含一个第二类的数的区间,因此我们可以求出只包含第一类和第二类数字的区间总数,而后减去只包含第一类区间数字的总数即可。

class Solution {
public:
    int numSubarrayBoundedMax(vector<int>& nums, int left, int right) {
        return count(nums, right) - count(nums, left - 1);
    }

    int count(vector<int>& nums, int lower) {
        int res = 0, cur = 0;
        for (int x : nums) {
            cur = x <= lower ? cur + 1 : 0;
            res += cur;
        }
        return res;
    }
};

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

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

相关文章

Nacos与Eureka中的高性能读写并发架构设计

Nacos、Eureka都是微服务领域内熟知、常用的注册中心组件。只不过呢&#xff0c;Nacos还多了个功能身份就是配置中心。从目前流行与随着Spring Cloud Alibaba发展来看&#xff0c;Nacos使用得更加多&#xff0c;也是趋势所在。 注册中心原理 注册中心原理其实很简单&#xff…

【18】Java常见的面试题汇总(Spring/Spring MVC)

目录 1. 为什么要使用 spring&#xff1f; 2. 解释一下什么是 aop&#xff1f; 3. 解释一下什么是 ioc&#xff1f; 4. spring 有哪些主要模块&#xff1f; 5. spring 常用的注入方式有哪些&#xff1f; 6. spring 中的 bean 是线程安全的吗&#xff1f; 7. spring 支持…

【Java八股文总结】之外卖平台项目整理

文章目录一、项目介绍1.1 项目整体介绍1.2 主要模块介绍二、项目开发2.1 后台管理系统开发2.1.1 员工管理employee1、员工后台登录2、员工退出3、过滤器4、新增员工5、员工信息分页查询↑&#xff08;参加上面&#xff09;6、修改员工信息7、根据id查询员工信息&#xff0c;回显…

后台开发的学习日记

后台开发的学习日记 Java后台开发的日记&#xff1a;Push一下自己每天都要学习后台 后台开发学习日志-Day1后台开发的学习日记Day1: 路线及资料的汇总一、应该选择什么语言&#xff1f;二、学习路线的规划及资料的汇总整理Day1: 路线及资料的汇总 第一天主要是路线的准备及资料…

Pytorch学习笔记(二)官方60min入门教程之自动微分

目录 一.相关包及函数介绍 二.雅各比向量积 三.练习代码 一.相关包及函数介绍 autograd 包是 PyTorch 中所有神经网络的核心。首先让我们简要地介绍它&#xff0c;然后我们将会去训练我们的第一个神经网络。该 autograd 软件包为 Tensors 上的所有操作提供自动微分。它是一…

显卡天梯图2022年11月新版 显卡性能排行榜天梯图

1 RTX 3090Ti 2 RTX 3090 3 RX 6900 XT水冷版 我用的显卡就是活动时8折抢购的太划算了 http://www.adiannao.cn/dq 4 RTX 3080 Ti 5 RX 6900 XT 6 Titan RTX 7 RTX 3080 8 RX 6800 XT 9 RX 6800 10 RTX 3070 Ti

C++数据结构X篇_01_数据结构的基本概念

从本篇开始学习数据结构相关概念。 数据结构的基本概念1 数据结构的相关概念1.1 为什么要学习数据结构1.2 数据结构中的基本概念2 算法2.1 算法的概念2.2 算法和数据结构的区别2.3 算法特性2.4 算法效率的度量2.4.1 事后统计法2.4.2 事前分析估算2.4.3 大O表示法2.4.3.1采用大O…

从事先进计算的工程师对此都有什么感想?

电子计算机最初诞生于二十世纪&#xff0c;体积庞大的初代机型运算能力有限&#xff0c;随着计算技术的升级完善&#xff0c;现在多样小巧的计算机及手机的计算能力呈指数级增长&#xff0c;更是成为人们生活密不可分的综合性助手。 先进计算是在计算的基础上诞生的全新概念&a…

Python3安装及基础语法

Python 官网&#xff1a;Welcome to Python.org Python安装&#xff1a;进入官网Download找到对应版本安装包&#xff0c;下载后双击安装&#xff0c;一直下一步即可&#xff1b;注意&#xff1a;安装最后一步勾选&#xff08;Add Python to PATH&#xff09;&#xff0c;默认…

用nginx作反向代理时,请求头中含波浪线无法转发请求的解决方法

请求头如下 POST /CDGServer3/s/rs/uni HTTP/1.1 Content-Type: text/html; charsetUTF-8 method~name: upgradePatchService user~userId: admin.local user~clientId: 343834353230344334424431 user~SessionID: 0 data~packageNo: 618 data~packageState: 1 User-Agent: Ra…

Android -- 每日一问:怎么理解 Activity 的生命周期?

典型回答 如果一个 Activity 在用户可见时才处理某个广播&#xff0c;不可见时注销掉&#xff0c;那么应该在哪两个生命周期的回调方法去注册和注销 BroadcastReceiver 呢&#xff1f; Activity 的可见生命周期发生在 onStart调用与 onStop调用之间。在这段时间&#xff0c;用户…

nginx(六十四)proxy模块(五)接收上游响应

一 接收上游的响应 前提&#xff1a; nginx与上游建立连接,把nginx生成的请求(line、header、body)信息发送给上游补充&#xff1a; 上游解析处理完之后,会发送响应​核心&#xff1a; nginx如何接收、解析、处理上游响应行、响应头、响应体 下载大文件失败 &#xff08;…

一文了解 Go 的复合数据类型(数组、Slice 切片、Map)

一文了解 Go 的复合数据类型[数组、切片 Slice、Map]前言数组数组的创建方式数组的遍历Slice 切片切片的创建方式切片的遍历向切片追加元素MapMap 的创建方式Map 的基本操作插入和修改删除查找操作遍历操作删除操作小结耐心和持久胜过激烈和狂热。 前言 上一篇文章一文熟悉 Go…

CMake Cookbook by Eric

I. Basics 关键字&#xff1a;CMake中的构建指令 指令的书写是大小写无关的&#xff1b; II. Project&#xff1a;指定项目名称和语言类型 命令格式&#xff1a;project(<PROJECT-NAME> [<language-name>...]) Note 项目名称<PROJECT-NAME>不需要与项目根…

论文阅读【7】HHM隐马尔科夫模型

1.隐马尔科夫模型&#xff08;HMM&#xff09;的介绍 隐马尔科夫模型有两个序列&#xff0c;上面一层序列的值称之为影藏值(隐式变量)&#xff0c;下面一个序列中的值被称为观察值&#xff0c;想这个的序列模型被称为生成模型&#xff08;Generate model&#xff09;。z表示的是…

Linux - lsof显示 tcp,udp 的端口和进程

文章目录功能语法示例lsof -i 显示 tcp&#xff0c;udp 的端口和进程等相关查看服务器 80 端口的占用情况使用 -p 查看指定进程打开的文件更多命令功能 lsof&#xff08;list open files&#xff09;是一个列出当前系统打开文件的工具。 lsof 需要访问核心内存和各种文件&…

【区块链技术与应用】(八)

https://blog.csdn.net/lakersssss24/article/details/125762826?spm1001.2014.3001.5501 https://blog.csdn.net/lakersssss24/article/details/126434147 https://blog.csdn.net/lakersssss24/article/details/126671408?spm1001.2101.3001.6650.3&utm_mediumdistribut…

[附源码]java毕业设计医院仪器设备管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

cubeIDE开发, stm32的OLED点亮及字符显示设计(基于SPI通信)

一、SPI 通信技术 显示屏&#xff08;LCD、OLED&#xff09;接口一般有I2C、SPI、UART、RGB、LVDS、MIPI、EDP和DP等。一般3.5寸以下的小尺寸LCD屏&#xff0c;显示数据量比较少&#xff0c;普遍采用低速串口&#xff0c;如I2C、SPI、UART。SPI&#xff08;Serial Peripheral I…

通用后台管理系统前端界面Ⅹ——前端数据表格的删除、查找

删除操作 1、拿到id或者行数据对象 2、查看后端接口方法&#xff0c;写api方法&#xff0c;将操作连接上后端 后端请求操作成功&#xff0c;但是前端数据表格未更新&#xff0c;最简单的一种方法数据删除后要重新获取数据》 依旧显示成功&#xff0c;但是前端数据表格未变化&…