leetcode 209 3 滑动窗口
class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { ,r=-; //由于数组是[]区间,所以这样使之不包含任何元素 ; //记录长度 ; //记录子数组的和 while(l< nums.size()) //滑动过程,每一次while都走一步 { <nums.size()&&sum<s)//同时保证有边界到底后不再继续拓展 sum+=nums[++r]; else sum-=nums[l++]; if(sum>=s) //每步生成子数组都判断条件 res=min(res,r-l+); } ) ;//没有更新,就是无解,就返回0 else return res; } };
这是一道与连续子数组相关的问题,如果尝试用暴力求解,每次遍历得到子数组,则是O(n^3)。
为什么考虑用滑动窗口?
因为滑动窗口能不遗漏的获取连续子数组(这里的连续很关键),并且,如果窗口步长为1,则可以对每一种情况都进行条件判断,随时更新。
具体实现思路:
- 对于某一子数组[i,j],考虑其内部元素是否达到要求,未达到要求,则扩大数组,考虑到数组应是从头开始的,所以扩张时是对j扩张,每一次扩张都获得一个新子数组,之后进行子数组条件判断,只要没达到要求,就再扩张j,直到达到要求。
- 倘若达到要求了,那么记录下这一长度。可是单纯达到要求还不够呀,因为我们要的是对所有的连续子数组进行遍历查看。
- 于是保持j不变,使i++,这样获得了一个新的子数组,重复子数组条件判断,仍然满足要求,则更新长度,若没有满足要求了,就又回到1.
总结:
简单来说,滑动窗口就是一种以单步走保证每种情况不遗漏的解法,最后时间复杂度只是O(n)(正比于走的路子2n)。
再来看leetcode 3。
class Solution { public: int lengthOfLongestSubstring(string s) { ]={}; ,r=-; ; while(l<s.size()) { <s.size() && freq[s[r+]]==) { r++; freq[s[r]]++; } else { freq[s[l++]]--; } res=max(res,r-l+); } return res; } };
可以看出,滑动窗口的模板是相对比较固定的。
对于一个滑动窗口,最大的循环是while(l<s.size()),是为了使得左边界也到达最大。之后是if(r+1<s.size() && freq[s[r+1]]==0),前半边是为了右边界在达到最大时不再继续扩张。
而这一if else循环是为了变动滑动窗口。
leetcode 209 3 滑动窗口的更多相关文章
- LeetCode编程训练 - 滑动窗口(Sliding Window)
滑动窗口基础 滑动窗口常用来解决求字符串子串问题,借助map和计数器,其能在O(n)时间复杂度求子串问题.滑动窗口和双指针(Two pointers)有些类似,可以理解为往同一个方向走的双指针.常用滑 ...
- 【LeetCode】480. 滑动窗口中位数 Sliding Window Median(C++)
作者: 负雪明烛 id: fuxuemingzhu 公众号: 每日算法题 本文关键词:LeetCode,力扣,算法,算法题,滑动窗口,中位数,multiset,刷题群 目录 题目描述 题目大意 解题方 ...
- 【leetcode】239. 滑动窗口最大值
目录 题目 题解 三种解法 "单调队列"解法 新增.获取最大值 删除 代码 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以 ...
- 【Leetcode 二分】 滑动窗口中位数(480)
题目 中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 ...
- Leetcode 239题 滑动窗口最大值(Sliding Window Maximum) Java语言求解
题目链接 https://leetcode-cn.com/problems/sliding-window-maximum/ 题目内容 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧 ...
- [LeetCode] Sliding Window Maximum 滑动窗口最大值
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- [LeetCode] Sliding Window Median 滑动窗口中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- leetcode的Hot100系列--3. 无重复字符的最长子串--滑动窗口
可以先想下这两个问题: 1.怎样使用滑动窗口? 2.如何快速的解决字符查重问题? 滑动窗口 可以想象一下有两个指针,一个叫begin,一个叫now 这两个指针就指定了当前正在比较无重复的字符串,当再往 ...
- [LeetCode] 239. Sliding Window Maximum 滑动窗口最大值
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
随机推荐
- LGOJ4449 于神之怒加强版
Description link 给定\(n\),\(m\),\(k\),计算 \[\sum_ {i=1}^n \sum^m_{j=1} gcd(i,j)^k \space mod \space 10 ...
- nginx相关地址
http://www.nginx.cn/doc/ 中文文档 http://nginx.org/en/docs/ 英文文档 https://pan.baidu.com/s/1qWAZ ...
- [LC] 159. Longest Substring with At Most Two Distinct Characters
Given a string s , find the length of the longest substring t that contains at most 2 distinct char ...
- 使用VSCode调试Javascript的三种方式
Code Runner 在应用商店中搜索Code Runner插件进行安装. 选中你要执行的Javascript脚本,右键选择Run Code,利用Console.log在下方的输出窗口里可以看到输出 ...
- Hadoop伪分布式HDFS环境搭建和使用
1.环境要求 Java版本不低于Hadoop要求,并配置环境变量 2.安装 1)在网站hadoop.apache.org下载稳定版本的Hadoop包 2)解压压缩包 检查Hadoop是否可用 hado ...
- 每个月执行一次任务,保存90天的mongo日志数据
用mongo 的dump 和 restore实现 shell版 #!/bin/bash mongodump --host -d lewifi -c auditOrigData -q {}} -o ~/ ...
- Protein interaction|insight QUANTA|SYBYL COMPOSER|MODELLER|SWISS_MODEL|WHAT IF|3D-JIGSAW|CPH-ModelGPCRs|Membrane protein|
生命组学 蛋白质之间的互作可以有以下应用: Eg:改变蛋白质基因,从而组改变结构,削弱蛋白质之间的相互作用. Eg:数据模拟出蛋白质的靶点,即结合腔,将此数据存入结合化合物的dataset,用于制药 ...
- get 传中文,可以通过下面这种方式
window.location.href=encodeURI("<%=path%>/XXX.XXX?name=中文"); 然后在后台通过new String(reque ...
- tomcat启动不了的问题
tomcat启动的几个问题 1.端口冲突 2.非端口冲突,需要加入配置host文件 日志文件: 解决办法:https://blog.csdn.net/u012949658/article/detail ...
- IOC @Autowired/@Resource/@Qulified的用法实例
首先要知道另一个东西,default-autowire,它是在xml文件中进行配置的,可以设置为byName.byType.constructor和autodetect:比如byName,不用显式的在 ...