滑动窗口
文章平均质量分 67
booooo丶
Try harder.
展开
-
3.无重复字符串的最长子串(Map:HashMap 或 TreeMap)
无重复字符串的最长子串给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“原创 2021-02-26 22:56:21 · 220 阅读 · 0 评论 -
1208.尽可能使字符串相等(滑动窗口)
尽可能使字符串相等给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。原创 2021-02-05 14:39:58 · 1377 阅读 · 6 评论 -
643.子数组最大平均数 I(滑动窗口)
子数组最大平均数 I给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。示例:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75解题思路由于是关于一个数组中子数组的求和问题,所以可以利用滑动窗口方法来解。(1) 首先,将数组 nums[] 中的前 k 个元素求和得到 sum ,并认为它是当前的最大值。(2) 随后设置一个 left 指针用来指向子数组中的第一个元素。原创 2021-02-05 17:26:10 · 1725 阅读 · 0 评论 -
1423.可获得的最大点数(滑动窗口)
可获得的最大点数几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最大化你的可原创 2021-02-06 10:26:16 · 835 阅读 · 1 评论 -
1493.删掉一个元素以后全为 1 的最长子数组(滑动窗口)
删掉一个元素以后全为 1 的最长子数组这道题目和1208.尽可能使字符串相等的解法类似,都是利用滑动窗口,找到满足条件的子区间。给你一个二进制数组 nums ,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0 。提示 1:输入:nums = [1,1,0,1]输出:3解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1 。示例 2:输入:nums = [0,1,1,1,0,1,1,0,1]输出:原创 2021-02-07 19:00:08 · 165 阅读 · 0 评论 -
978. 最长湍流子数组(滑动窗口)
最长湍流子数组当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组。若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A原创 2021-02-08 20:43:15 · 86 阅读 · 0 评论 -
992. K 个不同整数的子数组(滑动窗口)
K 个不同整数的子数组给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。示例 1:输入:A = [1,2,1,2,3], K = 2输出:7解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2].示例 2:输入:原创 2021-02-09 23:51:43 · 108 阅读 · 0 评论 -
567. 字符串的排列(滑动窗口)
字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False解题思路由于题中出现了子串,所以可以利用滑动窗口(双指针)来解决问题。但由于是判断 s2 是否包含 s1 的排列,所以要原创 2021-02-10 14:55:27 · 95 阅读 · 0 评论 -
485. 最大连续1的个数(一次遍历数组和滑动窗口:双指针)
最大连续1的个数给定一个二进制数组, 计算其中最大连续1的个数。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.解题思路方法一:一次遍历数组定义一个 maxCount 用来记录当前数组中最大连续 1 的个数。遍历时在没有遇到 0 时 count 值加 1。当遇到0时,先看当前 count 值是否是当前数组中最大连续 1 的个数再令 count = 0,重新开始计数,重复此过程直到数组末尾。最后还要再一次判断 c原创 2021-02-15 01:02:45 · 164 阅读 · 0 评论 -
480. 滑动窗口中位数(空间复杂度、滑动窗口)
滑动窗口中位数中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。例如:[2,3,4],中位数是 3[2,3],中位数是 (2 + 3) / 2 = 2.5给你一个数组 nums,有一个长度为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口向右移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出由它们组成的数组。示例:给出 nums = [1,3,-1,-3,5,3,6,7],以及 k = 3。原创 2021-02-15 20:55:35 · 1045 阅读 · 0 评论 -
424. 替换后的最长重复字符(滑动窗口:双指针)(再看)
替换后的最长重复字符给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 10^4。示例 1:输入:s = “ABAB”, k = 2输出:4解释:用两个’A’替换为两个’B’,反之亦然。示例 2:输入:s = “AABABBA”, k = 1输出:4解释:将中间的一个’A’替换为’B’,字符串变为 “AABBBBA”。子串 “BBBB” 有最原创 2021-02-16 18:46:36 · 2355 阅读 · 10 评论 -
995. K 连续位的最小翻转次数(异或符号 ^ 以及滑动窗口)
K 连续位的最小翻转次数在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。示例 1:输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0], K = 2输出:-1解释:无论我们怎样翻转大小为 2 的子数组,我们都原创 2021-02-18 14:53:23 · 347 阅读 · 4 评论 -
1004. 最大连续1的个数 III(滑动窗口)
最大连续1的个数 III给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10解释:原创 2021-02-19 12:24:43 · 96 阅读 · 4 评论 -
1438. 绝对差不超过限制的最长连续子数组(优先队列和滑动窗口 或 TreeMap方法)
绝对差不超过限制的最长连续子数组给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。示例 1:输入:nums = [8,2,4,7], limit = 4输出:2解释:所有子数组如下:[8] 最大绝对差 |8-8| = 0 <= 4.[8,2] 最大绝对差 |8-2| = 6 > 4.[8,2,4] 最大绝对差 |8-2| =原创 2021-02-21 16:41:59 · 242 阅读 · 0 评论 -
239. 滑动窗口最大值(优先队列和滑动窗口)
滑动窗口最大值给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:示例 2:输入:nums = [1], k = 1输出:[1]示例 3:输入:nums = [1,-1], k = 1输出:[1,-1]示例 4:输入:n原创 2021-02-22 14:52:27 · 593 阅读 · 0 评论 -
1052. 爱生气的书店老板(滑动窗口(有优化))
爱生气的书店老板今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回这一天营业下来,最多有原创 2021-02-23 11:56:22 · 71 阅读 · 0 评论 -
209. 长度最小的子数组(滑动窗口(优化))
长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:原创 2021-02-23 18:09:23 · 125 阅读 · 2 评论