人类进步的阶梯
算法和数据结构
滑动窗口go模板
nSum问题解决模板
【链表问题】
21. 合并两个有序链表
23. 合并 K 个升序链表
19. 删除链表的倒数第 N 个结点
876. 链表的中间结点
141. 环形链表
redis
tx
一些QA
【Redis】
rehash
击穿、穿透、雪崩
【计算机网络】
TCP
【Mysql】
索引
资料索引
本文档使用 MrDoc 发布
-
+
首页
滑动窗口go模板
使用之前需要思考的四个问题: 1、当移动right扩大窗口,即加入字符时,应该更新哪些数据? 2、什么条件下,窗口应该暂停扩大,开始移动left缩小窗口? 3、当移动left缩小窗口,即移出字符时,应该更新哪些数据? 4、我们要的结果应该在扩大窗口时还是缩小窗口时进行更新? ```go func slidingWindow(s string, t string) { // 初始化需要的字符和窗口 needs := map[rune]int{} window := map[rune]int{} for _, ch := range t { needs[ch]++ } // 初始化窗口相关的变量 left, right, valid := 0, 0, 0 for right < len(s) { // 要滑入的字符 c := rune(s[right]) // 向右滑动 right++ // 更新数据(window, valid) // ... // 满足条件,缩小窗口 for {cond} { // 记录满足时的left、right // ... // d 是即将滑出的字符 d := rune(s[left]) // 向左滑动 left++ // 更新数据 // ..... } } } ```
adminadmin
2024年6月2日 00:16
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码