(1)思路:滑动窗口的题目首先需要定义两个指针left,right;right用于遍历字符串;定义max_length用于记录当前字串的长度; (2)核心:如果窗口右边的元素不在集合中;加入到集合中;如果在集合中;说明左边的元素重复了;于是删除窗口左边的元素并且left指针向右移动;动态调整滑动窗口的大小;最后返回max_length Copy classSolutio...
滑动窗口算法就是用以解决数组/字符串的子元素问题 滑动窗口算法可以将嵌套的for循环问题,转换为单循环问题,降低时间复杂度
简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这样就降低了问题的复杂度,从而也达到降低了循环的嵌套深度。其实这里就可以看出来滑动窗口主要应用在数组和字符串上。 基本示例⟳ 如下图所示,设定滑动窗口(window)大小为 3,当滑动窗口每次划过数组时,计算当前滑动窗口...
滑动窗口算法的基本思想是维护一个窗口,通过移动窗口的两个边界来处理问题。 具体来说,我们可以使用两个指针 $left$ 和 $right$ 分别表示滑动窗口的左右边界,然后通过不断移动右指针 $right$ 来扩大窗口,同时根据问题的要求调整左指针 $left$ 来缩小窗口。当右指针 $right$ 扫描到字符串或数组的末尾时,算法的执...
滑动窗口是解决数组和字符串问题的利器,其根据当前窗口内子序列的情况,不断调整子序列的起始位置,从而将时间复杂度从O(n^2)转化为O(n)可以说是十分优雅。 其本质就是维护一个动态调整的区间(窗口),通过移动窗口边界(滑动),实现对窗口内数据的处理。 其常被用于解决一定条件下的连续区间的性质、长度、和等问题...
因为滑动窗口就是维护一个窗口,不断滑动,然后更新答案。我们用滑动窗口算法来走一波: 当k=2时, 我们可以维护一个长度为2的窗口,初始化第一个窗口值的总和,并保存起来 然后窗口不断向右滑动,滑动过程中,与保存的最大值比较,并更新答案。 窗口直到滑到最右边才结束。
一般情况下就是使用这个窗口在数组的合法区间内进行滑动,同时动态地记录一些有用的数据,很多情况下,能够极大地提高算法地效率。 1. 滑动窗口最大值 题目来源于 LeetCode 上第 239 号问题:滑动窗口最大值。题目难度为 Hard,目前通过率为 40.5% 。 题目描述 ...
滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作,它的原理与网络传输TCP协议中的滑动窗口协议(Sliding Window Protocol)基本一致。 这种技术可以将一部分问题中的嵌套循环转变为一个单循环,因此它可以减少时间复杂度。滑动窗口主要应用在数组和字符串上。
滑动窗口通常有两种形式: 固定大小的滑动窗口:窗口的大小是固定的,通常用于求解定长子数组或子串的问题。 可变大小的滑动窗口:窗口的大小是动态变化的,通常用于求解可变长度子数组或子串的问题。 固定大小的滑动窗口 固定大小的滑动窗口算法通常用于求解长度为 k 的子数组的最大值、最小值等问题。以下是一个简单的例...