news 2026/7/7 8:01:13

Java力扣---滑动窗口(2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java力扣---滑动窗口(2)

209. 长度最小的子数组 - 力扣(LeetCode)

分析:这个题目是在滑动窗口题目的类似题目中的,所以最开始就是准备用滑动窗口来做的

这里用到了滑动窗口的先进先出,但是要用数字和sum做更新,所以我想到了队列,但是在做题目的时候,因为不知道队列可以有多长,所以要用left和right来记录队列的开始和结束


注意1:我们只需要直到队列的开始元素和结束元素的下标,并不需要直到中间存储的数据,换句话说,中间的所有数据的下标都是要放在队列之中的,是连续的,所以并不需要队列,只需要记录first和last就好了


注意2:既然用到了left和right,那么就不用使用队列了,在写的代码里,队列是完全没用到的的------所以,写完代码要重新再看一遍,是不是有冗余的部分存在

class Solution { public int minSubArrayLen(int target, int[] nums) { //Deque<Integer> queue = new ArrayDeque<>(); int sum=0; int left=0,right=0; boolean flag=true; int ans=nums.length+1; while(right<nums.length){ while(sum<target && right<nums.length){ //queue.addLast(right); sum+=nums[right]; right++; } while(sum>=target){ flag=false; //queue.removeFirst(); sum-=nums[left]; left++; } ans=Math.min(ans,right-left+1); } if(flag) ans=0; return ans; } }

76. 最小覆盖子串 - 力扣(LeetCode)

分析:这个题是上一题的延申

1.要注意到可能有重复的字母,所以这里要单独分析

2.这里也是滑动窗口,但是并不需要用到队列,这里和上一题是一样的

3.这里只考虑字母出现了没有,并不考虑出现的顺序

--->这个解法很巧的一个思路是用次数,出现了几次来判断,这样子既可以判断有没有包含所有的,又可以巧妙地化解重复字符的问题

4.因为其中涉及到判断是否现在的子串满足条件,这个判断要多次出现,所以可以写成方法

5.这里的一个小巧思就是用字符的ASCII码来做字符的判断,这样就可以用数组了,我最开始想到的是用map来做,但是map会更麻烦很多,要考虑到是否存在,存在了再取出值加一,删除的时候也要取出值-1

class Solution { public String minWindow(String s, String t) { int[] tarr=new int[128]; int[] sarr=new int[128]; String sub=s; for(char c:t.toCharArray()){ tarr[c]++; } boolean flag=true; int left=0,right=0; while(right<s.length()){ while (iscontened(tarr,sarr)) { if(sub.length()> right-left){ sub=s.substring(left,right); } flag=false; sarr[s.charAt(left)]--; left++; } while (!iscontened(tarr,sarr) &&right<s.length()){ sarr[s.charAt(right)]++; right++; } } while (iscontened(tarr,sarr) && left<s.length()) { if(sub.length()> right-left){ sub=s.substring(left,right); } flag=false; sarr[s.charAt(left)]--; left++; } if(flag) return ""; return sub; } public static boolean iscontened(int[] tarr,int[] sarr){ for (int i = 0; i < tarr.length; i++) { if(tarr[i]>sarr[i]){ return false; } } return true; } }

这是用map做的代码,运行时间会高很多

1.contained遍历的时候一定是用tmap遍历的,而且要考虑不存在的情况

2.在存放的时候,要分开考虑已经有的键和还没有的键

class Solution { public String minWindow(String s, String t) { Map<Character, Integer> tmap = new HashMap<>(); Map<Character, Integer> smap = new HashMap<>(); String sub=s; for(char c:t.toCharArray()){ if(tmap.containsKey(c)){ tmap.put(c,tmap.get(c)+1); }else{ tmap.put(c,1); } } boolean flag=true; int left=0,right=0; char c; while(right<s.length()){ while (iscontened(tmap,smap)) { if(sub.length()> right-left){ sub=s.substring(left,right); } flag=false; c=s.charAt(left); if(smap.containsKey(c)){smap.put(c,smap.get(c)-1);} left++; } while (!iscontened(tmap,smap) && right<s.length()){ c=s.charAt(right); if(smap.containsKey(c)){smap.put(c,smap.get(c)+1);} else{smap.put(c,1);} right++; } } while (iscontened(tmap,smap) && left<s.length()) { if(sub.length()> right-left){ sub=s.substring(left,right); } flag=false; c=s.charAt(left); if(smap.containsKey(c)){smap.put(c,smap.get(c)-1);} left++; } if(flag) return ""; return sub; } public static boolean iscontened(Map<Character,Integer> tmap,Map<Character,Integer> smap) { for (Map.Entry<Character, Integer> entry : tmap.entrySet()) { if (!smap.containsKey(entry.getKey())) { return false; }else if (entry.getValue() > smap.get(entry.getKey())) { return false; } } return true; } }

代码思路学习灵茶山艾府 - 力扣(LeetCode)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 19:11:51

一套超实用的Excel财务账模板分享:凭证录入,支持自动生成报表 会计凭证录入, 自动生成报表, 现金流量表, 科目余额表, 资产负债表, 损益表

一套超实用的Excel财务账模板分享&#xff1a;凭证录入&#xff0c;自动生成报表&#xff01; 关键词&#xff1a; Excel财务账模板, 会计凭证录入, 自动生成报表, 现金流量表, 科目余额表, 资产负债表, 损益表 下载地址 &#x1f449;https://pan.quark.cn/s/f01e45b17191 …

作者头像 李华
网站建设 2026/7/7 0:24:03

终极网盘直链解析工具:10个让你告别下载烦恼的完整解决方案

还在为网盘下载的各种限制而头疼吗&#xff1f;现在有一款革命性的工具&#xff0c;能够智能解析主流网盘分享链接&#xff0c;为你提供真正的高速下载体验&#xff01;这款工具支持蓝奏云、奶牛快传、移动云空间、UC网盘、小飞机盘等20平台&#xff0c;彻底解放你的下载困扰。…

作者头像 李华
网站建设 2026/7/7 17:29:56

TradingView图表库实时数据流处理:5个核心机制深度解析

TradingView图表库实时数据流处理&#xff1a;5个核心机制深度解析 【免费下载链接】charting-library-tutorial This tutorial explains step by step how to connect your data to the Charting Library 项目地址: https://gitcode.com/gh_mirrors/ch/charting-library-tut…

作者头像 李华
网站建设 2026/7/7 10:57:14

终极原神抽卡分析工具:一键导出你的欧非历程全记录

还在为原神抽卡数据混乱而烦恼吗&#xff1f;想要准确掌握自己的欧气指数和保底情况吗&#xff1f;这款原神祈愿数据导出工具将彻底改变你的抽卡体验&#xff0c;通过自动记录和可视化分析&#xff0c;让你对抽卡概率了如指掌。 【免费下载链接】genshin-wish-export biuuu/gen…

作者头像 李华
网站建设 2026/7/7 13:29:07

conda安装环境问题

问题描述 (base) root/ai/stor# conda create -n llm_env python 3.10 -yCondaToSNonInteractiveError: Terms of Service have not been accepted for the following channels. Please accept or remove them before proceeding:- https://repo.anaconda.com/pkgs/main- https…

作者头像 李华
网站建设 2026/7/7 6:21:52

LobeChat跨境电商多语言描述转换

LobeChat跨境电商多语言描述转换 在全球电商蓬勃发展的今天&#xff0c;一个中国制造商只需轻点鼠标&#xff0c;就能将商品展示给远在南美洲的消费者。但问题也随之而来&#xff1a;如何让不懂中文的买家理解这款“智能恒温保温杯”的独特卖点&#xff1f;人工翻译成本高昂&am…

作者头像 李华