当前位置: 首页 > news >正文

算法题(子串)

一、题目

1、滑动窗口最大值(LC 239)

2、最小覆盖子串(LC 76)

二、题解

1、滑动窗口最大值(LC 239)

(1)分析

方法一:暴力。两层for循环,内循环求每个窗口的最大元素,外循环遍历每个窗口,将每次的最大元素存放在数组中,最后输出这个数组。时间复杂度较高,大量数据会导致超时。

方法二:使用双端队列的方法解决。假设滑动窗口的左右两端为 i 和 j ,先放nums[0]到双端队列队列,此后每添加一个新的元素nums[j]到队列前,把之前队列中的小于nums[j] 的元素都移出队列,也需要把不在这个窗口的元素移出队列。这样可以保证,每移动一次窗口,双端队列的首元素就是该窗口最大的元素,直接添加首元素到最终返回的数组中。

(2)解答
class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums==null||k==0){return new int[0];} int[] res = new int[nums.length-k+1]; Deque<Integer> deque = new LinkedList<>(); for(int j=0, i=1-k; j<nums.length; i++, j++){ if(i>0&&deque.peekFirst()==nums[i-1]){ deque.removeFirst(); } while(!deque.isEmpty()&&deque.peekLast()<nums[j]){ deque.removeLast(); } deque.addLast(nums[j]); if(i>=0){ res[i] = deque.peekFirst(); } } return res; } }

2、最小覆盖子串(LC 76)

(1)分析

创建两个数组统计给定的两个字符串字符出现的频次,以字符的ASCII值为下标,数组元素的大小表示字符出现的频次。设立左右指针,初始都为0,右指针先往右移动,并统计出现t字符串中字符的频次存储在数组中,当新数组包含t的数组,即每次字符出现的频次都大于t时,左指针向右移动,每移动一次减少一个字符频次,直至新数组不再包含t的数组,继续移动右指针,重复上述过程到遍历到最后一个字符。过程中不断更新左右指针差值最短的情况。取 resRight-resLef 最小的时候,分割该段字符串,就是所求的最短窗口子串。

(2)解答
class Solution { public String minWindow(String s, String t) { int[] arrS = new int[128]; int[] arrT = new int[128]; for(char c : t.toCharArray()){ arrT[c]++; } char[] chS = s.toCharArray(); int resLeft = -1; int resRight = chS.length; int left = 0; int right = 0; for(right=0; right<chS.length; right++){ arrS[chS[right]]++; while(isCovered(arrS,arrT)){ if(resRight-resLeft>right-left){ resLeft = left; resRight = right; } arrS[chS[left]]--; left++; } } return resLeft>-1? s.substring(resLeft,resRight+1): ""; } public boolean isCovered(int[] arrS, int[] arrT){ for(int i='a'; i<='z'; i++){ if(arrS[i]<arrT[i]){ return false; } } for(int i='A'; i<='Z'; i++){ if(arrS[i]<arrT[i]){ return false; } } return true; } }
http://www.jsqmd.com/news/717845/

相关文章:

  • 微信点餐小程序
  • Moneta Markets亿汇:比特币触及高位与风险动态
  • EFI Boot Editor(EFI引导编辑器)
  • vLLM-v0.11.0对比评测:为什么说它是LLM推理的“性能王者”?
  • Cancer Research重磅:单细胞测序揭开结直肠癌肝转移免疫耐药“伪装”
  • 2026年1季度|ilab智慧实验室管理软件平台系统排名分析:国内盛元广通上榜,综合lims实验室管理系统性能超前
  • GitHub爆火!国内首个大模型实践教程《Dive into LLMs》,带你从零掌握大模型核心技术
  • OMC - 16 让 Claude 真正“记住你”:oh-my-claudecode 的多层记忆与状态管理实践
  • CustomTkinter打包翻车?手把手教你用PyInstaller正确处理带数据文件的GUI库(附--add-data参数详解)
  • Python自动化脚本跨平台兼容性处理
  • 佛法与物理统一
  • 易元AI核心功能全解析:不只是剪辑,而是一套完整的素材工程系统
  • Hitboxer:解决游戏操作冲突的终极键位映射工具
  • DeepSeek V4大模型:性能顶级,价格亲民,国产芯片加持,让AI门槛大幅降低!
  • AMD Ryzen嵌入式单板计算机PCSF51工业应用解析
  • 流程型制造业生产优化,未来将如何被大模型技术重构?2026智造深研:实在Agent驱动端到端生产闭环
  • gtk与vulkan
  • Gemma-4-26B-A4B-it-GGUF镜像部署教程:免编译、免CUDA手动配置的llama.cpp方案
  • WeDLM-7B-Base多场景:支持LoRA热插拔,动态切换不同领域续写能力
  • SiameseAOE与Transformer架构结合:提升长文本抽取性能实践
  • OMC - 17 深入理解 Oh-My-ClaudeCode 配置系统
  • Mesa 组件,常用命令与调试
  • 2025届毕业生推荐的降AI率方案推荐榜单
  • 2026 年 4 月谷歌算法大变:内容决定 SEO 上限,结构决定 GEO 下限
  • 大模型转行必看:从规划到AI的完整攻略与心路历程分享,或许对你转行大模型有帮助
  • ScreenShare:Android屏幕采集编码架构深度解析
  • DeepSeek-OCR-2与GitHub Actions结合的CI/CD实践
  • openai算力云服务转向多平台
  • Qianfan-OCR实战案例:OCR结果接入LangChain构建企业专属文档RAG系统
  • 大模型开发工程师认证详解:政策背景、能力标准与职业前景全解析