
滑动窗口
Betternw
这个作者很懒,什么都没留下…
展开
-
最长无重复子数组 最长连续子序列
题目给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组示例1输入:[2,3,4,5] 返回值:4说明:[2,3,4,5]是最长子数组示例2输入:[2,2,3,4,3] 返回值:3说明:[2,3,4]是最长子数组分析使用哈希表。我们使用两个指针,一个i一个j,最开始的时候i和j指向第一个元素,然后i往后移,把扫描过的元素都放到原创 2021-08-01 14:40:37 · 1081 阅读 · 0 评论 -
【滑动窗口】 567 字符串的排列
题目描述:给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例 2:输入: s1= “ab” s2 = “eidboaoo”输出: False思路分析 public boolean checkInclusion(String s1, String s2) {原创 2021-05-26 20:58:39 · 100 阅读 · 0 评论 -
【滑动窗口】 串联所有单词的子串
题目描述:给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”, words = [“foo”,“bar”]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重要, [9,0]原创 2021-05-24 22:13:52 · 219 阅读 · 0 评论 -
【堆 优先队列】offer 59-1 滑动窗口的最大值
题目给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3]原创 2020-07-12 20:15:11 · 140 阅读 · 0 评论 -
【滑动窗口 总结】 438 找到字符串中所有字母异位词
题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。输入:s: “cbaebabacd” p: “abc”输出:[0, 6】起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的字母异位词。思路滑动窗口总结与寻找字符串排列一样 找到一个合法异位词就将起始索引加入res框架:while(){右移窗口进行窗口内数据更新判断左侧是否收缩wh原创 2020-06-27 12:18:34 · 101 阅读 · 0 评论 -
【双指针,滑动窗口;右指针寻找解,左指针寻找最优解】209 长度最小的子数组
题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。分析双指针。right右移,直到sum≥s,比较长度最小值。同时和减去最左值,left指针移动。直到sum<s为止。此时right继续移动。也就是小于s时,right移动,大于等于s时,left移原创 2020-06-07 00:15:28 · 88 阅读 · 0 评论 -
【滑动窗口】 16 最接近的三数之和
题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。代码 public int threeSumClosest(int[] nums, int target) { Arrays.sort原创 2020-07-27 09:52:20 · 180 阅读 · 0 评论 -
【滑动窗口】 76 最小覆盖子串
题目给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”思路right指针移动,直到window窗口中包含了所有t字符串的元素。left指针移动,计算每次移动后window的长度,并且用substring方法连接left到right的元素形成输出的字符串。直到window窗口中不包含t的元素,此时回到1步。直到right到达结尾,结束循环。代码public Str原创 2020-06-11 11:48:25 · 140 阅读 · 0 评论 -
【滑动窗口】 3 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路滑动窗口。将字符串转化为字符,放入hashmap中,对应的value的的位置。右指针移动放入元素,每次都计算与左的长度并取最大值,遇到重复的时,左指针来到上次这个元素出现位置的后一个。左指针更新位置时还要与上次元素位置大小进行比较的原因是:可能会有两个重复的元素,如果只找上一个重复的后一位,可能会倒退位置: …a…b…a原创 2020-06-11 10:19:16 · 124 阅读 · 0 评论