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

滑动窗口模板

209. 长度最小的子数组 - 力扣(LeetCode)

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0,right=0,sum=0,length=INT_MAX;while(right<nums.size()){while(right<nums.size()&&sum<target){sum+=nums[right];right++;}if(sum>target)length=min(length,right-left);while(sum>=target){length=min(length,right-left);sum-=nums[left];left++;}}return length==INT_MAX?0:length;}
};

2302. 统计得分小于 K 的子数组数目 - 力扣(LeetCode)

class Solution {
public:long long countSubarrays(vector<int>& nums, long long k) {long long res = 0, cnt = 0;int n = nums.size(), left = 0, right = 0;while (right < n){while (right < n && cnt < k){if (right > left)cnt /= right - left;cnt += nums[right];cnt *= right - left + 1;right++;}if (cnt >= k)res += n - right + 1;while (cnt >= k){if (right > left)cnt /= right - left;cnt -= nums[left];cnt *= right - left - 1;left++;if(cnt>=k)res += n - right + 1;}}return (long long)n*(n+1)/2-res;}
};

 (1)设置滑动窗口左右窗口初始值均为0,然后右区间开始移动,直至找到满足条件的区间或来到数组末尾。

(2)如果当前区间符合条件,则添加到结果中。对于2302来说,当前区间满足,则后面的区间一定都满足,更新结果。

(3)移动左窗口,直至不满足条件。移动的过程中,只要移动一次仍然满足条件,则找到了一个满足条件的窗口,更新结果。

http://www.dtcms.com/a/162522.html

相关文章:

  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 云服务器被黑客攻击应急响应与加固指南(上)
  • Swiper 在 Vue 中的使用指南
  • 用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
  • Atcoder Help 有关Atcoder 的介绍-1 涨分规则
  • docker安装Canal1.1.5,MySQL5.7踩坑
  • 企业架构之旅(2):解锁TOGAF ADM
  • OpenCV-Python (官方)中文教程(部分一)_Day16
  • MicroPython for ESP32 舵机控制详解
  • 【学习笔记】软件测试流程-测试设计阶段
  • 全地形车市场
  • FPGA-DDS信号发生器
  • watch 监视器
  • 【大语言模型开发】BPE算法(Byte-Pair)
  • 可调用对象(5)-bind函数适配器
  • 卫星互联网安全:机遇、挑战与未来方向
  • vite创建vue3项目并进行配置
  • 【二分查找】寻找峰值(medium)
  • 【记录一下】RagFlow 本地安装详细步骤(Windows + Linux)
  • SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南
  • 后端[特殊字符][特殊字符]看前端之Row与Col
  • 第二部分:网页的妆容 —— CSS(下)
  • 树莓派学习专题<12>:使用x264库实施H264编码--Linux和Windows上的部署
  • 【C++】线程池
  • VASP 教程:VASP 结合 phonopy 计算硅的声子谱
  • UDP 报文结构与注意事项总结
  • 打造即插即用的企业级云原生平台——KubeSphere 4.1 扩展组件在生产环境的价值全解