![](https://img-blog.csdnimg.cn/20200309141737914.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【滑窗 & 双指针】
1
wdt_
即使上线也匆忙,新版本,愁断肠,orz...
展开
-
【双指针】B031_LQ_人物相关性分析(细节+模拟)
小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob 有多少次同时出现。更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本 中 Alice 和 Bob 之间不超过 K 个字符。例如以下文本: This is a story about Alice and Bob. Alice wants to send a private message to Bob. 假设 K = 20,则 Alice 和 Bob 同时出现了 2 次,分别是”Alice and Bo原创 2020-08-26 19:03:46 · 221 阅读 · 0 评论 -
【双指针】B030_LQ_乘积最大(分类讨论)
给定N个整数A1, A2, … AN。请你从中选出K个数,使其乘积最大。请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以1000000009的余数。注意,如果X<0, 我们定义X除以1000000009的余数是负(-X)除以1000000009的余数。即:0-((0-x) % 1000000009)输入第一行包含两个整数N和K。以下N行每行一个整数Ai。输出一个整数,表示答案样例输入5 3 -100000 -10000 2 100000 100原创 2020-08-25 16:28:46 · 173 阅读 · 0 评论 -
【双指针】B029_LC_四数之和 & 四数相加 II(map记录另外两个数的下标 / 双指针+二分思想 | map+作差)
一、Problem给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0,原创 2020-08-07 20:50:25 · 215 阅读 · 0 评论 -
【双指针】A027_LC_最大得分(递推)
一、Problem你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 。一条 合法路径 定义如下:选择数组 nums1 或者 nums2 开始遍历(从下标 0 处开始)从左到右遍历当前数组如果你遇到了 nums1 和 nums2 中都存在的值,那么你可以切换路径到另一个- 数组对应数字处继续遍历(但在合法路径中重复数字只会被统计一次)得分定义为合法路径中不同数字的和请你返回所有可能合法路径中的最大得分由于答案可能很大,请你将它对 10^9 + 7 取余后返回输入:原创 2020-08-03 08:41:06 · 202 阅读 · 0 评论 -
【双指针】A026_LC_统计子串中的唯一字符(左右扩展 + 乘法定理)
一、Problem我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。例如:s = “LEETCODE” ,则其中 “L”, “T”,“C”,“O”,“D” 都是唯一字符,因为它们只出现一次,所以 countUniqueChars(s) = 5 。本题将会给你一个字符串 s ,我们需要返回 countUniqueChars(t) 的总和,其中 t 是 s 的子字符串。注意,某些子字符串可能是重复的,但你统计时也必须算上这些重复的子字符串(也原创 2020-07-23 22:50:43 · 208 阅读 · 0 评论 -
【双指针】B025_LC_数组中的最长山脉(从山峰的左右连续扩展)
一、Problem我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < … B[i-1] < B[i] > B[i+1] > … > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。如果不含有 “山脉” 则返回 0。示例 1:输原创 2020-07-22 11:04:08 · 169 阅读 · 0 评论 -
【双指针】B024_LC_三数之和的多种可能(分类讨论)
一、Problem二、Solution方法一:双指针看到多种可能,八九不离十是要找排列组合总数的了:当 A[l]+A[r]≠tar−A[i]A[l] + A[r] \not= tar-A[i]A[l]+A[r]=tar−A[i] 时,需要注意:因为 A 已经有序,需要讨论 A[l]=A[r]A[l] = A[r]A[l]=A[r] 和 A[l]!≠A[r]A[l] !\not= A[r]A[l]!=A[r] 的情况A[l]=A[r]A[l] = A[r]A[l]=A[r]原创 2020-07-16 11:50:40 · 161 阅读 · 0 评论 -
【滑窗】B024_LC_和相同的二元子数组(暴力前缀和 / map 优化)
一、Problem在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组。输入:A = [1,0,1,0,1], S = 2输出:4解释:如下面黑体所示,有 4 个满足题目要求的子数组:[1,0,1,0,1][1,0,1,0,1][1,0,1,0,1][1,0,1,0,1]提示:A.length <= 300000 <= S <= A.lengthA[i] 为 0 或 1二、Solution方法一:前缀和 + map第一眼看上去应该是一原创 2020-07-10 10:58:32 · 192 阅读 · 0 评论 -
【滑窗】A023_LC_K 连续位的最小翻转次数(队列维护窗口比较难懂)
一、Problem在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。输入:A = [0,0,0,1,0,1,1,0], K = 3输出:3解释:翻转 A[0],A[1],A[2]: A变成 [1,1,1,1,0,1,1,0]翻转 A[4],A[5],A[6]: A变成 [1,1,1,1,1,0,0,0]原创 2020-07-09 15:00:14 · 203 阅读 · 0 评论 -
【滑窗】A022_LC_K 个不同整数的子数组(恢复数据)
一、Problem给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。输入: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].提示:1 <= A.le原创 2020-07-08 21:51:49 · 180 阅读 · 0 评论 -
【双指针】B023_LC_区间列表的交集(移动区间结尾小的)
一、Problem给定两个由一些 闭区间 组成的列表,每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)输入:A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]原创 2020-07-08 10:23:34 · 181 阅读 · 0 评论 -
【滑窗】B021_LC_两个非重叠子数组的最大和(分类讨论 / 优化)
一、Problem给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。)从形式上看,返回最大的 V,而 V = (A[i] + A[i+1] + … + A[i+L-1]) + (A[j] + A[j+1] + … + A[j+M-1]) 并满足下列条件之一:0 <= i < i + L - 1 < j < j + M - 1 < A.length原创 2020-07-04 18:32:42 · 989 阅读 · 0 评论 -
【双指针】B022_LC_驼峰式匹配(分类讨论)
一、Problem如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。输入:queries = ["FooBar","FooBarTest","FootBall",原创 2020-07-03 20:13:14 · 125 阅读 · 0 评论 -
【滑窗】B001_LC_ 长度最小的子数组(穷举 / 前缀和数组 / 滑动窗口 / 二分)
一、题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。二、分析思路一暴力法:把所有可能的子数组求和并更新 ans ,直到我们找到最优子数组...原创 2019-08-19 02:08:11 · 200 阅读 · 0 评论 -
【双指针】B021_LC_满足条件的子序列数目(二分思想 + 排列组合 + 幂数组)
一、Problem给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。输入:nums = [3,5,6,7], target = 9输出:4解释:有 4 个子序列满足该条件。[3] -> 最小元素 + 最大元素 <= target (3 + 3 <= 9)[3,5] -> (3 + 5 <原创 2020-06-28 16:49:36 · 233 阅读 · 0 评论 -
【滑窗】B020_LC_删掉一个元素以后全为 1 的最长子数组(移动规则)
一、Problem给你一个二进制数组 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]输出:5解释:删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,原创 2020-06-27 23:09:26 · 212 阅读 · 0 评论 -
【滑窗】B019_LC_移动石子直到连续 II(分类讨论)
一、Problem在一个长度无限的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作端点石子。每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。值得注意的是,如果石子像 stones = [1,2,5] 这样,你将无法移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。要使游戏结束,你可以执行的最小和原创 2020-06-26 22:09:49 · 202 阅读 · 0 评论 -
【双指针】B020_LC_最接近的三数之和(二分思想 + 剪枝)
一、Problem二、Solution方法一:复杂度分析时间复杂度:O()O()O(),空间复杂度:O()O()O(),方法二:复杂度分析时间复杂度:O()O()O(),空间复杂度:O()O()O(),原创 2020-06-24 16:11:23 · 242 阅读 · 0 评论 -
【滑窗】B018_LC_替换子串得到平衡字符串(字符计数)
一、Problem有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。给你一个这样的字符串 s,请通过「替换一个子串」的方式,使原字符串 s 变成一个「平衡字符串」。你可以用和「待替换子串」长度相同的 任何 其他字符串来完成替换。请返回待替换子串的最小可能长度。如果原字符串自身就是一个平衡字符串,则返回 0。输入:s = "QWER"输出:0解释:s 已经是平衡的了。提示原创 2020-06-19 08:54:49 · 264 阅读 · 0 评论 -
【滑窗】B017_LC_尽可能使字符串相等(预处理字符差)
一、ProblemYou are given two strings s and t of the same length. You want to change s to t. Changing the i-th character of s to i-th character of t costs |s[i] - t[i]| that is, the absolute difference between the ASCII values of the characters.You are also原创 2020-06-16 18:26:55 · 181 阅读 · 0 评论 -
【字符串】B049_LC_字符串的排列(滑窗)
一、ProblemGiven two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string’s permutations is the substring of the second string.Input: s1 = "ab" s2 = "eidbaooo"Output: TrueExplana原创 2020-05-24 20:12:23 · 222 阅读 · 0 评论 -
【字符串】B048_LC_至少有K个重复字符的最长子串(滑窗 + 分治 / 优化)
一、ProblemFind the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no less than k times.Input:s = "aaabb", k = 3Output:3The longest substring is "aaa", as 'a' is repeate原创 2020-05-24 16:39:42 · 233 阅读 · 0 评论 -
【字符串】B047_LC_定长子串中元音的最大数目(滑动窗口)
一、ProblemGiven a string s and an integer k.Return the maximum number of vowel letters in any substring of s with length k.Vowel letters in English are (a, e, i, o, u).Input: s = "abciiidef", k = 3Output: 3Explanation: The substring "iii" contains 3 vo原创 2020-05-24 21:14:28 · 257 阅读 · 0 评论 -
【字符串】B047_LC_找到字符串中所有字母异位词(滑动窗口)
一、ProblemGiven a string s and a non-empty string p, find all the start indices of p’s anagrams in s.Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.The order of output does not mat原创 2020-05-24 09:55:42 · 233 阅读 · 0 评论 -
【字符串】A046_LC_最小覆盖子串(滑动窗口)
一、ProblemGiven a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).Input: S = "ADOBECODEBANC", T = "ABC"Output: "BANC"Note:If there is no such window in S that covers all characters i原创 2020-05-23 22:53:48 · 1236 阅读 · 0 评论 -
【字符串】C002_字符的最短距离(暴力枚举 | 两次遍历 | 滑动窗口)
一、题目描述Given a string S and a character C, return an array of integers representing the shortest distance from the character C in the string.Input: S = "loveleetcode", C = 'e'Output: [3, 2, 1, 0, ...原创 2020-02-08 22:54:16 · 235 阅读 · 0 评论 -
【线性 dp】B015_LC_爱生气的书店老板(注意分钟数 X)
一、ProblemToday, the bookstore owner has a store open for customers.length minutes. Every minute, some number of customers (customers[i]) enter the store, and all those customers leave after the end of that minute.On some minutes, the bookstore owner is原创 2020-05-26 17:58:31 · 211 阅读 · 0 评论 -
【数论】C023_大小为k且平均值大于等于阈值的子数组数目(穷举 / 滑窗 / 前缀和)
一、题目描述Given an array of integers arr and two integers k and threshold.Return the number of sub-arrays of size k and average greater than or equal to threshold.Input: arr = [2,2,2,2,5,5,5,8], k = ...原创 2020-02-10 22:29:29 · 168 阅读 · 0 评论 -
【双指针】B019_LC_三数之和(二分思想)
一、Problem二、Solution尝试一:双指针用滑窗套路还是不行的,因为窗口中的数字有可能被重用。class Solution { public List<List<Integer>> threeSum(int[] a) { Set<List<Integer>> st = new HashSet<>(); int n = a.length, l = 0, r = 0, sum = 0; Lin原创 2020-06-12 21:57:43 · 249 阅读 · 0 评论 -
【回溯】C058_NK_牛牛的三角形(选数 / 二分 + 滑动窗口)
一、Problem牛牛有一个数组长度大小为 n,数组中有 n 个正整数。现在牛牛请你从其中选出三个元素(注意选择元素的下标不能相同,但是其值可以相同)组成一个三角形。无法做到,请输出一行一个字符串 “No solution”,反之请输出这三个元素的值。如果有多种组成三角形的元素组合,你可以输出任意一种输入描述:第一行是一个正整数 n,(3≤n≤102)n,(3\leq n \leq 10^2)n,(3≤n≤102) 表示数组的元素个数。接下来一行输入n个正整数 aia_iai 表示每个数组元素原创 2020-05-08 21:55:05 · 880 阅读 · 0 评论 -
【数组】B056_三角形个数(暴力 / 滑动窗口)
一、Problem输入输入一个数n。输出输出三角形的个数。54 5 6 7 810二、Solution方法一:暴力import java.util.*;import java.math.*;import java.io.*;public class Main{ static class Solution { int N; int[] A; void i...原创 2020-05-02 09:07:53 · 240 阅读 · 0 评论 -
【数组】B051_LC_统计「优美子数组」(暴力 / 滑窗 / 前缀和)
一、ProblemGiven an array of integers nums and an integer k. A subarray is called nice if there are k odd numbers on it.Return the number of nice sub-arrays.Input: nums = [1,1,2,1,1], k = 3Output: 2...原创 2020-04-21 23:52:14 · 144 阅读 · 0 评论 -
【数论】C038_替换后的最长重复字符(滑动窗口)
一、题目描述Given a string s that consists of only uppercase English letters, you can perform at most k operations on that string.In one operation, you can choose any character of the string and change it...原创 2020-03-19 22:41:59 · 199 阅读 · 0 评论 -
【数论】C037_最大连续1的个数 I~III(滑动窗口)
一、题目描述二、题解方法一:枚举算法从每一个 1 开始计算连续的 1 的个数。每次遇到非 1,则暂时停止统计,更新最大连续 1 的个数。public int findMaxConsecutiveOnes(int[] nums) { int N = nums.length; int max = 0; int i = 0; while (...原创 2020-03-19 21:00:08 · 239 阅读 · 0 评论 -
【Sliding Window】B000_队列的最大值(滑动窗口)
一、题目描述请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1输入: ["MaxQueue","push_back","push_back","max_value","pop_front","max_va...原创 2020-03-07 09:54:26 · 159 阅读 · 0 评论 -
【暴力】C014_最长无重复子串(set / 滑动窗口)
Hoji的技术博客:在这里随意任性地创作,一首诗、一幅画、一篇文章… 在这里你可以get到但不仅限算法、Spring, SpringBoot等后端技术、MySql,Oracle数据库探索…博客地址:https://www.hoji.site一、题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复...原创 2019-11-17 17:00:26 · 186 阅读 · 0 评论