首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

优先算法 —— 滑动窗口系列 - 长度最小的子数组

前言 当我们发现暴力解法两个指针都不回退,都是向同一个方向移动的时候我们就可以使用滑动窗口 1. 长度最小的子数组 题目链接: 209....长度最小的子数组 - 力扣(LeetCode) https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 2....,先用sum来统计以left为左区间的所有子数组的和,什么意思呢?...,再计算数组走了几步,后面的就没有必要继续计算了,因为题目要求的是最小长度的子数组 接下来我们再将left往后移动一位,然后我们的right是可以不需要移动的,因为我们上面已经知道[...使用同向双指针(滑动窗口)来进行优化 如何使用滑动窗口: 1.

12610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《滑动窗口篇》---①长度最小的子数组(中等)

    滑动窗口推导过程 我们不能说一上来就知道这个题目用滑动窗口,然后就使用滑动窗口的方法来做这个题目。 首先我们想到的应该是暴力解法。 接着再优化为滑动窗口 由于数字都是 ≥ 0 的数。...right 还需要从新回到left的位置。再次计算累加和是否≥target。 而我们发现 (使用暴力解法的时候两个指针可以不会退。就可以用滑动窗口了) 此时只需要让sum-2 然后再次判断。...滑动窗口的使用: 1. left = 0,right =0; 2.进窗口 3.判断 4.出窗口 方法一:暴力解法 class Solution { public int minSubArrayLen...target, int[] nums) { int n = nums.length; int minLen = Integer.MAX_VALUE;// 用于存储最短子数组的长度...target, int[] nums) { int n = nums.length; int minLen = Integer.MAX_VALUE;// 用于存储最短子数组的长度

    4900

    长度为 K 的无重复字符子串(滑动窗口)

    题目 给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的 数目。...示例 1: 输入:S = "havefunonleetcode", K = 5 输出:6 解释: 这里有 6 个满足题意的子串,分别是: 'havef','avefu','vefun','efuno',...示例 2: 输入:S = "home", K = 5 输出:0 解释: 注意:K 可能会大于 S 的长度。在这种情况下,就无法找到任何长度为 K 的子串。...提示: 1 <= S.length <= 10^4 S 中的所有字符均为小写英文字母 1 <= K <= 10^4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com...,或者包含j字符 set.insert(S[j]);//j无重复了 if(set.size()==K)//包含j字符结尾的字符串有1个 count++;

    1.7K30

    长度最小的子数组(滑动窗口)

    找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。...如果不存在符合条件的子数组,返回 0 。...————滑动窗口 解法二: 思路:   其实整体思路和上面差不多,不过滑动窗口的left和right都是在向右移动,right指针没有回退的操作,这种“同向双指针” ,也被称为滑动窗口,其实很形象,...左右指针一直同向移动,看起来就像是在滑动的窗口,故此得名。   ...0 : len; } };   今天是第一次写滑动窗口的题,果然非常奇妙,居然只有O(N)的时间复杂度,理解滑动窗口的本质才有助于你解决类似问题不会毫无思路。

    10810

    滑动窗口:长度最小子数组 和 无重复字符的最长字串

    前言 声明:题目来源于: 力扣 一、长度最小的子数组 题目链接:传送门 (1) 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。...找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。...示例: 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释: 子数组 [4,3] 是该条件下的长度最小的子数组。...s ,请你找出其中不含有重复字符的 最长子串 的长度。...请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 (2)解题思路 处理特殊情况: 当长度小于等于1时,返回这个字符串本身即可。

    16610

    substr_replace如何替换多个字符串不同位置不同长度的子串

    都知道substr_replace可以替换指定位置的子串。...比如substr_repace("Hello Test",'xxxx',1,4)替换成Hxxxx Test 那么如何实现替换多个字符串不同位置不同长度的子串。...= [ 'Hxxxx Test', 'QQxxxxest', 'Sinxxxxail' ] 其实,substr_replace也可以实现多个字符串子串的替换。...l是传入的第四个参数处理之后的长度值(l取值0-原字符串长度)。然后执行三个copy操作,分别把from之前的原始字符串,替换后的字符串,from+l之后的字符串拷贝到结果字符串中取。...length长度大于替换字符串长度,比如substr_replace('Hello Test','xxxx',6) 输出内容Hxxxxest length大于原字符串长度的时候,比如substr_replace

    1.9K20

    所有元音按顺序排布的最长子字符串(滑动窗口)

    题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母('a' ,'e' ,'i' ,'o' ,'u')都必须 至少 出现一次。...这些元音字母的顺序都必须按照 字典序 升序排布(也就是说所有的 ‘a’ 都在 ‘e’ 前面,所有的 ‘e’ 都在 ‘i’ 前面,以此类推) 比方说,字符串 "aeiou" 和 "aaaaaaeiiiioou...给你一个只包含英文元音字母的字符串 word ,请你返回 word 中 最长美丽子字符串的长度 。如果不存在这样的子字符串,请返回 0 。 子字符串 是字符串中一个连续的字符序列。...示例 2: 输入:word = "aeeeiiiioooauuuaeiou" 输出:5 解释:最长子字符串是 "aeiou" ,长度为 5 。...示例 3: 输入:word = "a" 输出:0 解释:没有美丽子字符串,所以返回 0 。

    48820

    长度最小的子数组(滑动窗口)

    今天给大家分享一道 facebook 的面试题,也就是 Leetcode 209. 长度最小的子数组,提供滑动窗口解题思路,供大家参考。...题目: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。...示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。...滑动窗口解法: 假设下标从 i 到 j 连续子数组元素和为 sum,如下图示: ? 如果当前的 sum 小于 s,则将下标 j 右移,将其后面一个数组元素也加入到 sum 中,如下如示: ? ?...整个过程一直保持着一个窗口,其长度不是固定的,但是是被 i 和 j 这两个索引所定义的,窗口不停向前滑动去寻找满足题意的连续子数组。

    37130

    串联所有单词的子串----滑动窗口篇八

    ---- 串联所有单词的子串题解集合 暴力匹配版滑动窗口 用哈希优化暴力滑动 滑动距离优化+哈希优化 ---- 暴力匹配版滑动窗口 思路: 首先,最直接的思路,判断每个子串是否符合,符合就把下标保存起来...一旦在滑动窗口内发现不匹配的子串,就更新区间,另寻解 这里如何判断当前滑动窗口内的所有子串都与words数组完全匹配呢?...我们需要copy一份words数组,如果当前子串s与copy数组中某个字符串匹配,那么就将对应的字符串从copy数组中删除,然后继续去看区间剩余子串匹配情况。...} }; ---- 用哈希优化暴力滑动 思路: 使用两个哈希表,一个记录words数组中每个字符串出现的次数,一个记录当前滑动窗口中每一个字符串出现的次数。...如果滑动窗口当前查找的子串,存在于words数组中,但是出现次数超过了words数组中对应字符串出现的次数,那么也不符合,直接更新区间。

    32030

    给定m个不重复的字符 ,以及一个长度为n的字符串tbcacbdata滑动窗口

    题目 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, 问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置...本题的子串需要满足长度为m,字符不重复,可以使用长为m的滑动窗口遍历字符串,窗口内每个字符都要出现一次,如果符合条件,就返回窗口起始位置。...滑动窗口算法 滑动问题包含一个滑动窗口,它是一个运行在一个大数组上的子列表,该数组是一个底层元素集合。...代码 /** * 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, * 能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面...* 顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3.

    30310

    【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串

    我们要在一个字符串中寻找包含words的所有单词的子串,并会返回对应的开始位置(开始索引)。看这描述十分类似这道题目 438....就是遍历所有的子串,以样例来说: bar foo the foo bar man (注意步长是单词的长度),从左到右依次遍历,寻找满足条件的子串。...所以此时构成滑动窗口的条件两个指针移动方向一致 那么我们就按照滑动窗口的解题模版来思考细节: 进窗口 判断 出窗口 更新结果(位置待定) 首先我们要解决的是个一般性问题:s 字符串的长度一定是单词的整数倍吗...那么就要进行多次滑动窗口!保证可以遍历到所有可能的子串。那进行几次呢??? 可以看出来只需要进行单词个数次的循环即可!!!再多就发生重复了!...最小覆盖子串 家人们!!! 上链接!!!76. 最小覆盖子串 题目描述 根据题目描述,我们需要再字符串中寻找能够覆盖 t 中所有字符的 最短子串,这个“覆盖”是包含 t 中的每个字母,不用管顺序。

    37610

    字符串的排列(滑动窗口)(双指针)

    题目 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。...示例2: 输入: s1= "ab" s2 = "eidboaoo" 输出: False 注意: 输入的字符串只包含小写字母 两个字符串的长度都在 [1, 10,000] 之间 来源:力扣(LeetCode...) 链接:https://leetcode-cn.com/problems/permutation-in-string 著作权归领扣网络所有。...思路 使用两个map来操作 mp0用来记录s1中字符种类和数目,mp1用来记录s2中滑动窗口的字符种类和数目,用两个指针来规定s2中窗口起末位置。 当mp0 == mp1时返回true。...如果此窗口不符合mp0 == mp1则left, right一起向右移动,并且让mp1[s2[left]]--,让mp1[s2[right]]++,这里需要注意:如果mp1[s2[left]]--后mp1

    47510

    【剑指offer:最长不含重复字符的子字符串】滑动窗口(双指针)+优化改进思路

    题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 题目分析 留意最长子串和子序列不是一个概念。...例如对“pwwkew”来说,最长子串是“wke”,“pwke”是其中一个子序列。 在不考虑时间的情况下,直接暴力法对所有的子串进行检查。复杂度是$O(N^3)$,会超时错误。...解法 2: 优化后的滑动窗口 在解法 1 的流程中的第 3 步,如果s[j]出现在滑动窗口内,采用的做法是左边逐步缩小滑动窗口。事实上,不需要逐步缩小。...假设滑动窗口内和s[j]相同字符下标是 j’,那么直接跳过[i, j'] 范围即可。...j = 0; let ans = 0; while (i < length && j < length) { // 容易理解:检查s[j]是否出现过,并且s[j]重复的字符是否在当前的滑动窗口中

    46420
    领券