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

数据结构-滑动窗口三题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、第一题
  • 二、第二题
  • 三、第三题
  • 总结


前言

相比于网上的题解我的会更丑,但也会更细,毕竟是新手


一、第一题

第一题没什么好说的,为了熟悉还是看了题解
在这里插入图片描述

class Solution {public int lengthOfLongestSubstring(String s) {Set<Character>  set1=new HashSet<>();int ans=0,rk=-1;//rk是右针int n=s.length();//[0,n-1]for(int i=0;i<n;i++){//拿掉一个左指针,第一次则忽略if(i!=0){set1.remove(s.charAt(i-1));}//不越界;把if写在上面做判断;第一次从这里开始,rk+1是右针的nextwhile(rk+1<n && !set1.contains(s.charAt(rk+1))){//不包含下一个字符set1.add(s.charAt(rk+1));++rk;}ans=Math.max(ans,rk+1-i);}return ans;}
}

二、第二题

第二题也没什么好说的,看了一下没有思路,还是去看题解
在这里插入图片描述
这个时候已经在总结了
这里的思路是:

以10个字符长度去滑动,得到的数组记在List中,但是怎么去计数和判断重复还是不清楚,看了别人的评论说可以创建两个数组,数组1collection放第一次出现的,如果数组1中已存在就放入数组2visited,数组2就是答案。想不到的原因还是写得少了,看到python想到了字典,没有想到java的map也有key、value。不过相对来说java的map确实比python的dict要复杂很多!!

class Solution {public List<String> findRepeatedDnaSequences(String s) {Set<String> set1=new HashSet<>();List<String> ans=new ArrayList<>();int n=s.length(),L=10;//左指针放到循环中,右指针依赖左指针for(int i=0;i<n-L+1;i++){//左指针从零开始,右指针从L-1开始String s1=s.substring(i,i+L);//这里我还犹豫了一下怎么取,实际上substring要比charAt简单,所以这题应该比上一题简单。if(set1.contains(s1) && !ans.contains(s1)){ans.add(s1);}else{set1.add(s1);}  }return ans; }
}

这个也是看的题解,但是不是官方的题解,是个人的;官方题解说可以用int32位来计数,这个还是见仁见智吧,我脑袋里面没有利用位的思维,那就没必要尝试去记,强行记了也不是自己的。

三、第三题

看了两题第三题就写出来了,不过花了1个半小时
在这里插入图片描述
这一题比较经典,以前记得看到过很多次
在这里插入图片描述
先贴代码后面解释

class Solution {//滑动窗口public int minSubArrayLen(int target, int[] nums) {int n=nums.length,ans=0;//1for(int i=0;i<n;i++){//2int rk=i-1,sum=0,temp=0;//3while(rk+1<n && sum<target){//4sum+=nums[rk+1];//5rk++;//6}//7if(sum<target){//8break;//9}//10temp=rk-i+1;//11if(ans==0){//12ans=temp;//13}//14if(temp!=0){//15ans=Math.min(ans,temp);//16}//17}//18        return ans;//19}//20
}//21

写了很久,好看的还没有写出来,估计也不会写了,就这样吧。

首先肯定是写for循环,顺能生巧,第3行开始就开始写错了,rk写的是等于i,rk为什么不能写成i要写成i-1呢?因为写成i,rk++就不好摆,放在sum+的前面后面都不对,执行完了后会和i多一个步差出来,所以rk一定要等于i-1,在左指针的前面,这样测试用例一个数就满足的不会往后多走一步(其实ans等于1就已经可以返回了,因为不可能比1更小)。测试用例[1,4,4]就是这个问题,第三个测试用例是所有加起来达不到target,这个时候也可以先返回了,对应的是8、9的判断。11、12、13行是因为ans如果等于min(ans,rk-i+1)就会一直等于0,这里还没想好怎么处理,就用temp接收,后面的赋值同理,因为至少要赋值一次ans才不等于0.

至于过程中出现的越界问题和范围写错了本来也很想写一下的,但是记不住了,这个都是调试可以解决的,可以在本地自己debug,感觉要是能debug的话,很多算法都可以写出来。


总结

重点在第三题,因为是自己写的,所以感悟也最深。
滑得动则滑,滑不动就干别的了,主要是为了面试准备,并不是专职数据结构的。

http://www.dtcms.com/a/506603.html

相关文章:

  • 做黑网站吗怎么建设营销型网站
  • 免费企业网站程序关注love石家庄公众号微信
  • 如何进行网站开发网站开发郑州
  • 东营建网站wordpress商城汉化主题
  • 合肥昱天建设有限公司网站2016手机网站制作规范
  • 网站制作 青岛seo工具下载
  • 做初中物理题目的网站photoshop 做网站logo
  • 网站开发技术项目邢台网站建设最新报价
  • 木地板企业网站模版网站空间到期怎么办
  • 佛山著名网站建设公司赣州瑞金网站建设
  • 免费模板下载网站推荐免费asp企业网站源码
  • 华企立方网站深圳广告设计公司深圳画册设计
  • 网站制作全包价格中国商标商标查询网
  • 做学校和企业对接的网站做企业网站接单
  • 开发区网站开发语言网站建设5000费用
  • 自己做网站用什么软件深圳建设交易宝安
  • 建站教程下载网站建设首页模板下载
  • 网站建设中英文版软件科技公司网站模板
  • 内部网站建设青青网站怎么做
  • 做孵化的网站php网站开发书籍
  • 手机网站app辅助wordpress 页面编辑器
  • 网站建设免费视频教程wordpress5.0.3下载
  • 网站的推广代码是什么河南搜索引擎推广公司
  • 小程序代理与加盟windows优化
  • 做网站的软件wd的叫啥源码网
  • 怎么用html5做自适应网站品牌营销策略论文
  • 网站专题报道页面怎么做的建设牌安全带官方网站
  • 一家只做正品的网站河北人工智能建站系统软件
  • 学校网站制作素材美橙互联 wordpress
  • jsp建设网站教程网站建设合同违约金细节