LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目

题目

一个数组的 分数 定义为数组之和 乘以 数组的长度。

  • 比方说,[1, 2, 3, 4, 5] 的分数为 (1 + 2 + 3 + 4 + 5) * 5 = 75 。

给你一个正整数数组 nums 和一个整数 k ,请你返回 nums 中分数 严格小于 k 的 非空整数子数组数目

子数组 是数组中的一个连续元素序列。

示例 1:

输入:nums = [2,1,4,3,5], k = 10
输出:6
解释:
有 6 个子数组的分数小于 10 :
- [2] 分数为 2 * 1 = 2 。
- [1] 分数为 1 * 1 = 1 。
- [4] 分数为 4 * 1 = 4 。
- [3] 分数为 3 * 1 = 3 。 
- [5] 分数为 5 * 1 = 5 。
- [2,1] 分数为 (2 + 1) * 2 = 6 。
注意,子数组 [1,4] 和 [4,3,5] 不符合要求,因为它们的分数分别为 10 和 36,但我们要求子数组的分数严格小于 10 。

示例 2:

输入:nums = [1,1,1], k = 5
输出:5
解释:
除了 [1,1,1] 以外每个子数组分数都小于 5 。
[1,1,1] 分数为 (1 + 1 + 1) * 3 = 9 ,大于 5 。
所以总共有 5 个子数组得分小于 5 。

解析

滑动窗口使用前提:

  • 连续子数组/子串。
  • 有单调性。本题元素均为正数,所以子数组越长,分数越高;子数组越短,分数越低。这意味着只要某个子数组的分数小于 k,在该子数组内的更短的子数组,分数也小于 k。

做法:

  1. 枚举子数组的右端点 right,同时维护窗口内的元素和 sum 以及窗口左端点 left。窗口的分数为 sum⋅(right−left+1)。
  2. 元素 x=nums[i] 进入窗口,把 sum 增加 x。
  3. 如果窗口的分数 ≥k,那么把左端点元素 nums[left] 移出窗口,同时减少 sum,把 left 加一。
  4. 内层循环结束后,[left,right] 这个子数组是合法的。根据上面的使用前提 2,在这个子数组内部的子数组也是合法的,其中右端点小于 right 的子数组,我们在之前的循环中已经统计过了,这里只需要统计右端点恰好等于 right 的合法子数组,即[left,right],[left+1,right],…,[right,right]这一共有 right−left+1 个,加入答案。

作者:灵茶山艾府
链接:https://leetcode.cn/problems/count-subarrays-with-score-less-than-k/solutions/1595722/by-endlesscheng-b120/
来源:力扣(LeetCode)

答案

/*** @param {number[]} nums* @param {number} k* @return {number}*/
var countSubarrays = function(nums, k) {let left = 0, ans = 0, sum = 0;    //初始化左指针,子数组个数和子数组的得分for(let right = 0; right < nums.length; right++) {    //移动右指针,扩大窗口sum += nums[right];    //更新子数组的和while(sum * (right - left + 1) >= k) {    //如果得分大于等于ksum -= nums[left];    //计算减去左端点后的子数组和left++;    //移动左指针,缩小窗口}ans += right - left + 1;    //更新符合条件的子数组个数}return ans;
};

复杂度分析

时间复杂度:O(n),其中 n 是 nums 的长度。虽然写了个二重循环,但是内层循环中对 left 加一的总执行次数不会超过 n 次,所以总的时间复杂度为 O(n)。
空间复杂度:O(1)。

作者:灵茶山艾府
链接:https://leetcode.cn/problems/count-subarrays-with-score-less-than-k/solutions/1595722/by-endlesscheng-b120/
来源:力扣(LeetCode)

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

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

相关文章

TDengine IDMP 基本功能(1.界面布局和操作)

UI 布局和操作说明 TDengine IDMP 的用户界面&#xff08;UI&#xff09;设计旨在提供直观、易用的操作体验。下面介绍 UI 的主要区域和典型操作&#xff1a; 主要区域 IDMP 的用户界面是完全基于浏览器的。登录后的典型 UI 界面具有几个区域&#xff1a; 主菜单&#xff1a;AI…

QT(概述、基础函数、界面类、信号和槽)

一、概述1、QTQT是一个c的第三方库&#xff0c;是专门用来进行界面编程的一个库 1. QT本身实现了多种软件&#xff1a; 2. ubuntu系统中所有界面都是QT做的 3. 最新版本的QQ也是QT做的 4. 嵌入式编程中&#xff0c;几乎所有的上位机&#xff0c;都可以使用QT来做 QT本身除了实现…

【从零开始java学习|第六篇】运算符的使用与注意事项

目录 一、算术运算符 1. 基本算术运算符&#xff08;二元&#xff09; 2. 自增 / 自减运算符&#xff08;一元&#xff09; 二、类型转换&#xff08;隐式与强制&#xff09; 1. 隐式转换&#xff08;自动类型转换&#xff09; ​编辑 2. 强制转换&#xff08;显式类型转…

shellgpt

一、介绍 官网&#xff1a;https://github.com/TheR1D/shell_gpt ShellGPT&#xff08;shell_gpt&#xff09; 是一款把 GPT 系列大模型能力直接搬到终端 的开源命令行生产力工具。用日常英语或中文描述需求&#xff0c;就能帮你 生成、解释甚至自动执行 Shell 命令&#xff…

geoserver sql视图调用Postgis自定义函数问题记录

一、问题描述&#xff1a;geoserver sql视图调用Postgis自定义函数对点图层增加一条记录时&#xff0c;返回结果主键自增ID加了2&#xff0c;但表中数据只增加一条记录。 但在pgAdmin中直接写SQL调用Postgis自定义函数对点图层增加一条记录时&#xff0c;返回结果主键自增ID只加…

#T1224. 最大子矩阵

题目传送 题目描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵&#xff0c;你的任务是找到最大的非空(大小至少是11)子矩阵。 比如&#xff0c;如下44的矩阵 0 -2 -7 09 2 -6 2 -4 1 -4 1-1 8 0 -2的最大子矩阵是 9 2-4 1-1 8这…

2025年大模型安全岗的面试汇总(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 1. Transformer核心机制及其对LLM突破的基石作用 2. LLM能力边界评估框架设计 3. 模型层级安全风险分析 …

《关于省级政务云服务费支出预算标准的规定》豫财预〔2024〕106号解读

《关于省级政务云服务费支出预算标准的规定》豫财预〔2024〕106号文件由河南省财政厅编制经省政府同意后于2024年12月3日印发执行&#xff0c;规定作为省级政务云服务费支出预算编制和审核的依据&#xff0c;旨在加强省级部门预算管理&#xff0c;规范政务云服务费支出预算编制…

使用HalconDotNet实现异步多相机采集与实时处理

文章目录 一、核心功能与原理 功能目标: 工作原理: 关键机制: 二、完整C#实现代码 三、关键实现解析 1. 零拷贝图像传输 2. 动态帧率控制 3. HALCON并行优化 4. 异常隔离机制 四、高级优化策略 1. 硬件加速配置 2. 内存池管理 3. 实时性保障 一、核心功能与原理 功能目标:…

《疯狂Java讲义(第3版)》学习笔记ch4

ch4流程控制与数组1.switch语句后的expression表达式的数据类型只能是byte、short、char、int四种证书类型。2.建议不要在循环体内修改循环变量&#xff08;也叫循环计数器&#xff09;的值&#xff0c;否则会增加程序出错的可能性。3.定义数组推荐语法格式&#xff1a;type[] …

COLMAP进行密集重建,三维重建的步骤

密集重建是在稀疏重建的基础上进行的 稀疏重建见&#xff1a;用 COLMAP GUI 在 Windows 下一步步完成 相机位姿估计&#xff08;SfM&#xff09; 和 稀疏点云重建的详细步骤&#xff1a;_colmap database导入图片位姿-CSDN博客 完成稀疏重建后直接进入以下步骤进行密集重建&am…

基于飞算JavaAI实现Reactor模式服务器的深度实践

一、飞算JavaAI技术概述 1.1 飞算JavaAI平台简介飞算JavaAI是飞算科技推出的智能化Java开发平台&#xff0c;通过AI技术赋能传统软件开发流程&#xff0c;为开发者提供从需求分析到代码实现的全流程智能化解决方案。该平台深度融合了人工智能技术与软件开发实践&#xff0c;具备…

量子人工智能

量子人工智能&#xff08;QAI&#xff09;是量子计算与人工智能的强大融合。这一领域旨在将量子系统独特的计算能力与人工智能的模式识别和学习能力相结合&#xff0c;以更快、更高效地解决问题。 量子人工智能与常规人工智能的区别是什么&#xff1f;常规人工智能在经典计算机…

算法题Day1

1. 练习1&#xff1a;Hello,World!解题步骤:using namespace std; int main() {cout<<"Hello,World!"<<endl;return 0; }2. 练习2&#xff1a;打印飞机解题步骤:#include <iostream> using namespace std; int main() {cout << " …

Cypher注入详解:原理、类型与测试方法

Cypher&#xff0c;全称为 (Open) Cypher Query Language&#xff0c;是一种专为图数据库设计的声明式查询语言。它以直观的模式匹配方式&#xff0c;帮助开发者和数据分析师从复杂的图结构数据中检索、创建和修改信息。如果说 SQL 是关系型数据库的语言&#xff0c;那么 Cyphe…

PG靶机 - Pelican

一、 初步侦察与服务探测 1.1 端口扫描与服务识别 首先&#xff0c;对目标主机 192.168.163.98 进行全面的端口扫描&#xff0c;以识别所有开放的服务。 sudo nmap 192.168.163.98 -p- --min-rate5000 -A图 1: Nmap 扫描结果&#xff0c;显示多个开放端口 扫描结果表明&#xf…

【1】Transformers快速入门:自然语言处理(NLP)是啥?

第一章&#xff1a;自然语言处理&#xff08;NLP&#xff09;是啥&#xff1f;一句话解释&#xff1a; NLP 教电脑听懂人话、说人话的技术 &#xff08;比如让手机听懂你说话、让翻译软件变聪明&#xff09;NLP发展史&#xff1a;电脑学人话的 “翻车史” 第一阶段&#xff08…

微软发布五大AI Agent设计模式 推动企业自动化革新

今日&#xff0c;微软在官网正式公布了企业级AI智能体&#xff08;Agent&#xff09;的五大核心设计模式&#xff0c;旨在通过模块化架构与自适应能力&#xff0c;帮助企业构建具备推理、协作与自主进化能力的"数字员工团队"。这一技术框架突破传统RPA&#xff08;机…

如何根据本地是有GPU安装对应CUDA版本的PyTorch

要在本地安装与您的NVIDIA GPU匹配的CUDA版本PyTorch&#xff0c;请按以下步骤操作&#xff1a; 步骤1&#xff1a;确定GPU型号和驱动信息 1.按 Win X选择 ​设备管理器​2.展开 ​显示适配器​ → 记录您的NVIDIA显卡型号&#xff08;如RTX 3060&#xff09;3.打开命令提示…

在FP32输入上计算前向传播需要多长时间?FP16模型的实例与之前的模型相比,它快了多少?

下面的 MixedModel 类使用作为参数提供的数据类型创建了一个非常简单的两层模型: class MixedModel(nn.Module): def init (self, dtype): super(). init