[go: nahoru, domu]

Skip to content

Latest commit

 

History

History

滑动窗口

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Solutions for LeetCode Sliding Window

本文件夹只包含README文档,文档主要整理平时刷题时候遇到的滑动窗口的问题以及对应的题解链接,题解的代码存储在路径其他杂题/中。

滑动窗口指的是这样一类问题的求解方法,在数组上通过双指针同向移动而解决的一类问题。其实这样的问题我们可以不必为它们专门命名一个名字,它们的解法其实是很自然的。

滑动窗口可以处理几乎所有的子串问题

代码框架

private func generateDict(_ list: [Character]) -> [Character: Int] {
    var dict: [Character: Int] = [:]
    for char in list {
        dict[char, default: 0] += 1
    }
    return dict
}

func slidingWindow(_ s: [Character], _ p: [Character]) {
    var window: [Character: Int] = [:]
    var need: [Character: Int] = generateDict(p)
    
    var (left, right, valid) = (0, 0, 0)
    while (right < s.count) {
        // c是将要移入窗口的字符
        let char = s[right]
        // 右移窗口
        right += 1
        // 对窗口内的数据进行更新
        ...
        
        // DEBUG的输出位置
        print("window: [\(left), \(right)]")
        
        // 判断左侧窗口是否需要收缩
        while (window needs shrink) {
            // d 是将要移出窗口的字符
            let d = s[left];
            left += 1
            // 对窗口进行一系列更新
            ...
        }
    }
}

简单题

219. 存在重复的元素II

643. 子数组最大平均数 I

1876. 长度为三且各字符不同的子字符串

1984. 学生分数的最小差值

2269. 找到一个数字的 K 美丽值

2760. 最长奇偶子数组

2379. 得到 K 个黑块的最少涂色次数

LCR 056. 两数之和 IV - 输入二叉搜索树

中等题

3. 无重复字符的最长子串

187. 重复的DNA序列

209. 长度最小的子数组

438. 找到字符串中所有字母异位词

567. 字符串的排列

剑指 Offer 48. 最长不含重复字符的子字符串

395. 至少有 K 个重复字符的最长子串

713. 乘积小于 K 的子数组

1004. 最大连续1的个数 III

248. 统计「优美子数组」

1297. 子串的最大出现次数

1658. 将x减到0的最小操作数

413. 等差数列划分

2824. 统计和小于目标的下标对数目

100145. 统计完全子字符串

困难题

30. 串联所有单词的子串

76. 最小覆盖子串

220. 存在重复元素 III

剑指 Offer 59 - I. 滑动窗口的最大值