当前位置: 首页 > news >正文

【Leetcode 每日一题】2444. 统计定界子数组的数目

问题背景

给你一个整数数组 n u m s nums nums 和两个整数 m i n K minK minK 以及 m a x K maxK maxK
n u m s nums nums的定界子数组是满足下述条件的一个子数组:

  • 子数组中的 最小值 等于 m i n K minK minK
  • 子数组中的 最大值 等于 m a x K maxK maxK

返回定界子数组的数目。
子数组是数组中的一个连续部分。

数据约束

  • 2 ≤ n u m s . l e n g t h ≤ 1 0 5 2 \le nums.length \le 10 ^ 5 2nums.length105
  • 1 ≤ n u m s [ i ] , m i n K , m a x K ≤ 1 0 6 1 \le nums[i], minK, maxK \le 10 ^ 6 1nums[i],minK,maxK106

解题过程

确定了左右端点,就可以唯一确定一个子数组。
这题中符合条件的子数组数量,是根据待查找的 m i n K minK minK m a x K maxK maxK 位置变化而变化的。
枚举数组的右端点,找到 m i n K minK minK m a x K maxK maxK,这时上一个符合条件的位置到越界位置之间的所有元素,都可以作为数组的左端点,这样就能计算出子数组的数量了。
需要注意的是, 0 0 0 是合法位置的下标,初始状态要赋值为 − 1 -1 1

具体实现

class Solution {public long countSubarrays(int[] nums, int minK, int maxK) {long res = 0;int minIndex = -1, maxIndex = -1, rangeIndex = -1;for (int i = 0; i < nums.length; i++) {int cur = nums[i];if (cur == minK) {minIndex = i;}if (cur == maxK) {maxIndex = i;}if (cur < minK || cur > maxK) {rangeIndex = i;}res += Math.max(Math.min(minIndex, maxIndex) - rangeIndex, 0);}return res;}
}

相关文章:

  • 图像特征检测算法对比及说明
  • 2025.4.26总结
  • ADC单通道采集实验
  • 3:QT联合HALCON编程—海康相机SDK二次程序开发
  • Android12源码编译及刷机
  • 详解Adobe Photoshop 2024 下载与安装教程
  • 论文笔记(八十)π0.5: a Vision-Language-Action Model with Open-World Generalization
  • Python并行计算:2.Python多线程编程:threading模块详解与守护线程实战
  • Spring Boot 3.4 实战指南:从性能优化到云原生增强
  • Spring Boot安装指南
  • Java后端开发——分层解耦详解
  • [mysql]数据类型精讲下
  • 用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1
  • Synology HDD db - 群晖硬盘兼容性数据库工具
  • Linux0.11内存管理:相关代码
  • DeepSeek系列(9):团队协作最佳实践
  • 数字喜好判断之谜
  • 财务管理域——绩效管理系统设计
  • 代理专栏总结
  • 【微知】/proc中如何查看Linux内核是否允许加载内核模块?(/proc/sys/kernel/modules_disabled)
  • 柴德赓、纪庸与叫歇碑
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀
  • 核电开闸!国常会核准10台新机组,拉动超2000亿投资,新项目花落谁家?
  • 戴昕谈隐私、数据、声誉与法律现实主义
  • 俄军方:已完成库尔斯克地区全面控制行动