滑动窗口与动态规划:解决无重复子串与股票收益问题
1. 算法实战无重复字符的最长子串与含冷却期的股票最大收益在算法面试和编程竞赛中字符串处理和动态规划是两类经典问题。今天我想分享两个看似不同但都考验思维模式的题目解法找出字符串中最长无重复字符的子串Longest Substring Without Repeating Characters以及带有卖出冷却期的股票买卖最大收益问题Maximum Profit with Cooldown。这两个问题分别来自LeetCode的第3题和第309题在实际面试中出现频率极高。第一个问题考察滑动窗口技巧的应用需要在线性时间内完成字符串扫描第二个问题则需要设计包含状态转移的动态规划方案考虑交易规则的约束条件。虽然领域不同但都体现了算法设计中如何高效处理约束条件的核心思想。下面我会结合代码示例和状态转移图拆解这两个问题的解决思路和优化技巧。2. 无重复字符的最长子串解析2.1 问题定义与暴力解法给定一个字符串s要求找出其中不含有重复字符的最长子串的长度。例如abcabcbb的最长无重复子串是abc长度为3。最直观的暴力解法是检查所有可能的子串def lengthOfLongestSubstring(s): max_len 0 for i in range(len(s)): seen set() for j in range(i, len(s)): if s[j] in seen: break seen.add(s[j]) max_len max(max_len, len(seen)) return max_len这种方法时间复杂度为O(n²)当字符串较长时性能堪忧。2.2 滑动窗口优化方案更高效的方案是使用滑动窗口配合哈希表记录字符位置def lengthOfLongestSubstring(s): char_index {} left max_len 0 for right, char in enumerate(s): if char in char_index and char_index[char] left: left char_index[char] 1 char_index[char] right max_len max(max_len, right - left 1) return max_len这个算法的时间复杂度优化到O(n)空间复杂度O(min(m,n))其中m是字符集大小。关键技巧当发现重复字符时直接将窗口左边界跳到该字符上次出现位置的下一位避免不必要的重复检查。2.3 边界条件与测试用例需要特别注意的边界情况包括空字符串输入() → 应返回0全相同字符(aaaaa) → 应返回1无重复字符(abcdef) → 应返回字符串长度混合情况(pwwkew) → 最长子串wke返回33. 含冷却期的股票买卖问题3.1 问题建模给定一个股票价格数组prices其中prices[i]表示第i天的股票价格。设计算法计算最大利润交易规则为可以完成任意次交易卖出股票后需要等待一天才能再次买入冷却期不能同时进行多笔交易必须卖出当前持有股票后才能再买入示例prices [1,2,3,0,2] 最大利润为3对应交易序列买入1卖出2利润1冷却买入0卖出2利润23.2 动态规划状态设计定义三个状态hold[i]第i天结束时持有股票的最大利润sold[i]第i天结束时不持有股票且处于冷却期的最大利润rest[i]第i天结束时不持有股票且不处于冷却期的最大利润状态转移方程hold[i] max(hold[i-1], rest[i-1] - prices[i]) sold[i] hold[i-1] prices[i] rest[i] max(rest[i-1], sold[i-1])最终结果为max(sold[n-1], rest[n-1])3.3 Python实现与空间优化def maxProfit(prices): if not prices: return 0 hold -prices[0] sold 0 rest 0 for i in range(1, len(prices)): prev_hold hold hold max(hold, rest - prices[i]) rest max(rest, sold) sold prev_hold prices[i] return max(sold, rest)通过变量复用将空间复杂度从O(n)优化到O(1)。4. 算法对比与经验总结4.1 解题模式差异滑动窗口适用于子串/子数组类问题通过维护窗口边界来避免重复计算状态机DP适用于带约束条件的序列决策问题通过明确定义状态来理清转移逻辑4.2 常见错误排查对于无重复子串问题忘记更新字符最后出现位置窗口左边界移动时未考虑历史位置对于股票问题混淆hold和rest状态的转移条件初始化时未正确处理base case冷却期状态转移遗漏前一天卖出操作4.3 性能优化技巧滑动窗口问题可以先用暴力解法验证逻辑正确性动态规划问题建议先画出状态转移图对于空间敏感的场景观察是否只需要前一个状态使用断言(assert)验证边界条件在实际面试中建议先明确问题约束条件再选择合适的数据结构和算法范式。这两个问题虽然领域不同但都体现了算法设计中对问题约束条件的建模能力。

相关新闻

Windows系统学习路线与核心技术解析

Windows系统学习路线与核心技术解析

1. Windows系统学习路线规划 作为从Windows 95时代一路走来的老用户,我见证了Windows系统二十多年的演进历程。对于想要系统学习Windows的朋友,建议从以下几个阶段循序渐进: 1.1 基础操作与系统管理 先掌握Windows的基础操作逻辑&#xff0…

2026/10/11 7:57:27 阅读更多 →
Unity多层动画状态机:构建可扩展角色移动系统的工程实践

Unity多层动画状态机:构建可扩展角色移动系统的工程实践

1. 项目概述:为什么需要多层动画状态机?在Unity里做角色移动,新手最容易掉进的坑就是试图用一个Animator Controller搞定所有事情。我见过太多项目,一个状态机里塞满了Idle、Walk、Run、Jump、Attack、Death等几十个状态&#xff…

2026/10/10 6:47:40 阅读更多 →
AI NPC:别让演示效果骗了你

AI NPC:别让演示效果骗了你

AI NPC:别让演示效果骗了你 一段 NPC 演示能顺利完成对话,不等于它在游戏里可以交付。演示往往只有一名玩家、固定路线和完整网络;上线后还会遇到任务状态过期、寻路失败、服务超时和玩家反复触发同一交互。 把语言模型接进 NPC 时&#xff0…

2026/10/10 8:24:37 阅读更多 →

最新新闻

司法拍卖土地数据爬虫:应对反爬、结构突变与双平台适配

司法拍卖土地数据爬虫:应对反爬、结构突变与双平台适配

简介:本资源是一套面向Python初学者与数据采集实践者的司法拍卖信息自动化采集工具,聚焦淘宝、京东两大平台的土地类司法拍卖每日数据抓取需求,适用于潜在竞买人、法律从业者及市场研究人员快速获取标的物名称、位置、起拍价、保证金、拍卖时…

2026/10/11 7:57:06 阅读更多 →
Copilot Code Review接入CI:Balanced模式实战与避坑指南

Copilot Code Review接入CI:Balanced模式实战与避坑指南

上个月我还在一遍一遍地点击同一个按钮:打开 PR、等 Copilot Code Review 在评论区里冒出一串建议、再人工判断哪些要改,哪些只是噪声。直到 GitHub 把这套 Code Review 能力开放成 API,我才终于把它从“网页上的一个功能”变成了“CI 里的一…

2026/10/11 7:57:06 阅读更多 →
Redis 为什么会卡住:fork、大 key、慢命令、AOF fsync 4 个阻塞源逐个排除

Redis 为什么会卡住:fork、大 key、慢命令、AOF fsync 4 个阻塞源逐个排除

我不会起名字322 后端 / 算法 / 数据库 📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL 文章目录Redis 为什么会卡住:fork、大 key、慢命令…

2026/10/11 7:57:06 阅读更多 →
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路

用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路

2026年用 Web VR 引擎搭建元宇宙 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路 2026年,3D 虚拟展厅与 VR 全景线上展会已从概念演示进入可规模化交付的工程阶段。本文面向开发者,围绕 Web VR 引擎这一技术底座,拆解一条完…

2026/10/11 7:57:06 阅读更多 →
MySQL 的脏页什么时候写回:Buffer Pool、redo log 与 4 个刷脏时机

MySQL 的脏页什么时候写回:Buffer Pool、redo log 与 4 个刷脏时机

我不会起名字322 后端 / 算法 / 数据库 📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL 文章目录MySQL 的脏页什么时候写回:Buffer Pool、…

2026/10/11 7:57:06 阅读更多 →
宁夏职业院校学工信息管理系统怎么选?本地需求特点要注意什么?

宁夏职业院校学工信息管理系统怎么选?本地需求特点要注意什么?

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

2026/10/11 7:56:05 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →