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

[leetcode]2302.统计得分小于k的子数组

1.题目

2.事例

3.数据规模

4.思路(滑动窗口)

4.1滑动窗口的定义

滑动窗口是一种在数组、字符串等序列数据结构上进行操作的算法技巧。以下是其定义及相关要素的详细介绍:

  • 定义:滑动窗口可以理解为在一个序列上,用一个固定大小或者大小可变的 “窗口” 进行滑动,通过不断移动窗口的位置来对序列中的元素进行分组和处理,从而解决一些涉及连续子序列的问题。
  • 窗口大小:窗口的大小可以是固定的,例如在一个数组中,定义一个大小为k的固定滑动窗口,从数组的起始位置开始,每次向右移动一位,依次考察每一个长度为k的子数组。窗口大小也可以是可变的,根据具体问题的要求和条件,窗口会动态地扩大或缩小,以满足特定的计算需求。
  • 滑动规则:通常情况下,滑动窗口从序列的一端开始,按照一定的步长逐步向另一端滑动。每次滑动时,窗口会舍弃序列中最前面的一个元素(如果窗口大小固定),同时纳入序列中当前位置的下一个元素,以此来更新窗口内的元素集合。
  • 应用场景:常用于解决字符串匹配、数组求和、寻找最长或最短子序列等问题。例如,在字符串中查找包含特定字符集合的最小子串问题,就可以使用滑动窗口算法。通过不断调整窗口的大小和位置,找到满足条件的最小子串。

滑动窗口算法通过巧妙地利用窗口的滑动和元素的增减,避免了对所有可能子序列的暴力枚举,从而降低了算法的时间复杂度,提高了计算效率。

4.2本题思路

这个题目可以用滑动窗口的思想去解决,首先是可以从左到右去进行窗口的扩张,如果窗口里面的值*长度<k就继续向右扩大窗口,如果已经>=k了那么就停止向右扩张,并且将窗口左边界向右进行收缩,直到重新恢复到合法状态,此时把左边界确定,然后右边界重新扩张,循环上述过程即可得到答案!

5.代码

class Solution {
public:long long countSubarrays(vector<int>& nums, long long k) {int l=0,r=0;long long sum=0;long long ans=0;while(r<nums.size()){sum+=nums[r];r++;//cout<<"------"<<(r-l)*sum<<endl;if((r-l)*sum>=k){while(l<r){sum-=nums[l];l++;if((r-l)*sum<k){ans+=(r-l);break;}}}else {ans+=(r-l);//cout<<r-l<<endl;}}//ans+=(r-l);return ans;}
};

感谢大家观看,如果有任何想要交流的都可以评论区讨论!

相关文章:

  • java 使用 POI 为 word 文档自动生成书签
  • 学生管理系统审计
  • 【Java ee初阶】多线程(4)
  • 第十一节:性能优化高频题-响应式数据深度监听问题
  • 大模型(LLMs)强化学习—— PPO
  • Android wifi开发调试总结
  • NIPS2021 | 视觉 Transformer 的有趣特性
  • 华纳云:centos如何实现JSP页面的动态加载
  • Oracle的PLSQL中动态执行函数
  • Ubuntu中C++项目安装二次规划库——qpOASES 库
  • 基于STM32、HAL库的DS2411R安全验证及加密芯片驱动程序设计
  • HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(一、项目介绍及实现效果展示)
  • 蓝桥杯Python组高频考点与解题策略
  • Axios 传参与 Spring Boot 接收参数完全指南
  • Visual Studio 技能:调整软件界面布局
  • SoapUi测试1——REST(WebAPi、Json协议/HTTP、Post通讯方式)接口测试
  • C语言基础—(函数,指针与形参实参,字符串与指针,结构体)
  • 在另外一台可以科学下载的电脑用ollama下载模型后,怎么导入到另外一台服务器的ollama使用
  • (一)Linux的历史与环境搭建
  • 云原生--核心组件-容器篇-6-Docker核心之-镜像仓库(公共仓库,私有仓库,第三方仓库)
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 金科服务:大股东博裕资本提出无条件强制性现金要约收购,总代价约17.86亿港元
  • 港理大公布多项AI+医工成果,助港建设国际医疗创新枢纽
  • 文化润疆|让新疆青少年成为“小小博物家”
  • 修订占比近30%收录25万条目,第三版《英汉大词典》来了
  • 伊朗国防部发言人:发生爆炸的港口无进出口军用物资