秋招算法刷题7

20240410

1.接雨水

在这里插入图片描述
方法一,动态规划,时间复杂度O(n^2),空间复杂度O(n)

public int trap(int[] height) {         int n=height.length;         if(n==0){             return 0;         }         int[] leftMax=new int[n];         leftMax[0]=height[0];         for(int i=1;i<n;++i){             leftMax[i]=Math.max(leftMax[i-1],height[i]);         }         int[] rightMax=new int[n];         rightMax[n-1]=height[n-1];         for(int i=n-2;i>=0;--i){             rightMax[i]=Math.max(rightMax[i+1],height[i]);         }         int ans=0;         for(int i=0;i<n;++i){             ans+=Math.min(leftMax[i],rightMax[i])-height[i];         }         return ans;     }

方法二、栈

时间复杂度O(n),空间复杂度O(n)

public int trap(int[] height) {         int ans=0;         Deque<Integer> stack=new LinkedList<Integer>();         int n=height.length;         for(int i=0;i<n;++i){             while(!stack.isEmpty()&&height[i]>height[stack.peek()]){                 int top=stack.pop();                 if(stack.isEmpty()){                     break;                 }                 int left=stack.peek();                 int currWidth=i-left-1;                 int currHeight=Math.min(height[left],height[i])-height[top];                 ans+=currWidth*currHeight;             }             stack.push(i);         }         return ans;     }

方法三.双指针法
时间复杂度O(n),空间复杂度O(1)

public int trap(int[] height) {         int ans=0;         int left=0,right=height.length-1;         int leftMax=0,rightMax=0;         while(left<right){             leftMax=Math.max(leftMax,height[left]);             rightMax=Math.max(rightMax,height[right]);             if(height[left]<height[right]){                 ans+=leftMax-height[left];                 ++left;             }else{                 ans+=rightMax-height[right];                 --right;             }         }         return ans;     }

20240411

滑动窗口

1.无重复字符的最长子串

public int lengthOfLongestSubstring(String s) {         Set<Character> occ=new HashSet<Character>();         int n=s.length();         int rk=-1,ans=0;         for(int i=0;i<n;i++){             if(i!=0){                 occ.remove(s.charAt(i-1));             }             while(rk+1<n&&!occ.contains(s.charAt(rk+1))){                 occ.add(s.charAt(rk+1));                 ++rk;             }             ans=Math.max(ans,rk-i+1);         }         return ans;     }

时间复杂度O(n),感觉有点累死字符串匹配算法

2.找到字符串中所有字母异味词

public List<Integer> findAnagrams(String s, String p) {         int sLen=s.length(),pLen=p.length();         if(sLen<pLen){             return new ArrayList<Integer>();         }         List<Integer> ans=new ArrayList<Integer>();         int[] sCount=new int[26];         int[] pCount=new int[26];         for(int i=0;i<pLen;++i){             ++sCount[s.charAt(i)-'a'];             ++pCount[p.charAt(i)-'a'];         }         if(int i=0;i<sLen-pLen;++i){             --sCount[s.charAt(i)-'a'];             ++sCount[s.charAt(i+pLen)-'a'];              if(Arrays.equals(sCount,pCount)){                 ans.add(i+1);             }         }         return ans;     }
int sLen=s.length();    
int pLen=p.length();      
if(sLen<pLen){    return ans;}//建立两个数组存放字符串中字母出现的词频,并以此作为标准比较     int [] scount=new int[26];     int [] pcount=new int[26];      //当滑动窗口的首位在s[0]处时 (相当于放置滑动窗口进入数组)     for(int i=0;i<pLen;i++){        ++scount[s.charAt(i)-'a'];//记录s中前pLen个字母的词频         ++pcount[p.charAt(i)-'a']; //记录要寻找的字符串中每个字母的词频(只用进行一次来确定)     }      //判断放置处是否有异位词     (在放置时只需判断一次)    if(Arrays.equals(scount,pcount)){          ans.add(0);     }         //开始让窗口进行滑动     for(int i=0;i<sLen-pLen;i++){ //i是滑动前的首位         --scount[s.charAt(i) -'a'];       //将滑动前首位的词频删去         ++scount[s.charAt(i+pLen) -'a'];  //增加滑动后最后一位的词频(以此达到滑动的效果)         //判断滑动后处,是否有异位词         if(Arrays.equals(scount,pcount)){ans.add(i+1);         }     }    return ans;}

560.和为K的子数组

前缀和+哈希表优化

public int subarraySum(int[] nums, int k) {int count=0,pre=0;HashMap<Integer,Integer> mp=new HashMap<>();   mp.put(0,1);      for(int i=0;i<nums.length;i++){pre+=nums[i];             if(mp.containsKey(pre-k)){                 count+=mp.get(pre-k);}             mp.put(pre,mp.getOrDefault(pre,0)+1);         }        return count;  }

20240412

239.滑动窗口最大值

https://leetcode.cn/problems/sliding-window-maximum/description/?envType=study-plan-v2&envId=top-100-liked

1.优先队列

public int[] maxSlidingWindow(int[] nums, int k) {         int n=nums.length;         PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {              public int compare(int[] pair1, int[] pair2) {                  return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];                          }          });          for(int i=0;i<k;++i){             pq.offer(new int[]{nums[i],i});         }         int[] ans=new int[n-k+1];         ans[0]=pq.peek()[0];         for(int i=k;i<n;++i){             pq.offer(new int[]{nums[i],i});             while(pq.peek()[1]<=i-k){                 pq.poll();             }             ans[i-k+1]=pq.peek()[0];         }         return ans;     }

2.单调队列

class MyQueue{     Deque<Integer> deque=new LinkedList<Integer>();     void poll(int val){         if(!deque.isEmpty()&&val==deque.peek()){             deque.poll();         }     }     void add(int val){         while(!deque.isEmpty()&&val>deque.getLast()){             deque.removeLast();         }         deque.add(val);     }     int peek(){         return deque.peek();     } } public class TwoNum {     public int[] maxSlidingWindow(int[] nums,int k){         if(nums.length==1){             return nums;         }         int len= nums.length-k+1;         int[] res=new int[len];         int num=0;         MyQueue myQueue=new MyQueue();         for(int i=0;i<k;i++){             myQueue.add(nums[i]);         }         res[num++]= myQueue.peek();         for(int i=k;i<nums.length;i++){             myQueue.poll(nums[i-k]);             myQueue.add(nums[i]);             res[num++]=myQueue.peek();         }         return res;      } }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java:字符集和字符流

字符集 规定了字符和二进制之间对应关系的一张表 字节是计算机最基本的存储单位 字符则是通过字符组成和编码而成的文本 常见字符集 1,ASCII字符集 基础字符编码标准,包含128个字符,只包括英文字母,数字和一些常见的符号 一个字节表示一个字符 所有的字符集均兼容ASCII…

open-sora

Open-Sora&#xff0c;高效复现类Sora视频生成方案开源&#xff01;魔搭社区最佳实践教程来啦&#xff01;https://mp.weixin.qq.com/s/WMQIDgZs2MBPGtx18XSXgw Open-Sora开源方案讲解开源但“平替”的方案。https://mp.weixin.qq.com/s/nPYCzgBA7hIsPZ6PCyXxKQOpen-Sora/docs…

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路&#xff1a;导入基础数据操作库包&#xff0c;PCA、k-means 库包&#xff0c;数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

YOLOV5训练KITTI数据集实践

目录 一、YOLOV5下载安装二、KITTI数据集三、标签格式转换四、修改配置文件五、训练六、测试 一、YOLOV5下载安装 git clone https://github.com/ultralytics/yolov5.git conda create -n yolov5 python3.8 -y conda activate yolov5 cd yolov5 pip install -r requirements.t…

2024最火的情感短视频素材在哪下载?这里有几个素材网站可以下载

在这个看似无边无际的短视频海洋中&#xff0c;我就像那个手握罗盘、脚踏破旧木筏的勇敢航海家&#xff0c;时刻准备着发现新大陆。而我的罗盘&#xff0c;就是那些能够指引我找到珍稀素材的网站。让我带你领略一下我的航海日记吧。九才素材网&#xff1a; 九才素材网提供了丰…

青少年体能素质教育平台

一、项目背景与意义 随着社会的快速发展和人们生活水平的提高&#xff0c;青少年体能素质教育逐渐受到社会各界的广泛关注。体能素质作为青少年全面发展的重要组成部分&#xff0c;对于提升他们的健康水平、增强自信心、培养团队协作精神和创新能力具有重要意义。然而&#xf…

继承【C/C++复习版】

目录 一、什么是继承&#xff1f;怎么定义继承&#xff1f; 二、继承关系和访问限定符&#xff1f; 三、基类和派生类对象可以赋值转换吗&#xff1f; 四、什么是隐藏&#xff1f;隐藏vs重载&#xff1f; 五、派生类的默认成员函数&#xff1f; 1&#xff09;派生类构造函…

关于转义符 \ 在php正则中的匹配问题

今天做题遇到一个很经典的问题&#xff0c;记录一下&#xff0c;先看一段代码 <?php $str&#xff0c;&#xff0c;"\\"; $pattern&#xff0c;&#xff0c;"/\\/"; if(preg_match($partern,$str,$arr)) { &#xff0c;&#xff0c;&#xff0c;&…

SpringBoot编写一个SpringTask定时任务的方法

1&#xff0c;在启动类上添加注解 EnableScheduling//开启定时任务调度 2&#xff0c; 任务&#xff08;方法&#xff09;上也要添加注解&#xff1a; Scheduled(cron " 0 * * * * ? ") //每分钟执行一次 域&#xff1a; 秒 分 时 日 月 周 &#xff08;年&#…

如何修复在Deepin系统中因`apt-get autoremove systemd`导致的启动问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

选择正确的Go Module Path

最近我在查看项目代码时&#xff0c;注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法&#xff0c;相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path&#xff0c;但这…

Jmeter针对多种响应断言的判断

有时候response返回的结果并非一种&#xff0c;有多种&#xff0c;需要对这几种进行判断的时候需要使用Bean Shell。 &#xff08;1&#xff09;首先获取响应数据 String response prev.getResponseDataAsString(); ResponseCode 响应状态码 responseHeaders 响应头信息 res…

Peter算法小课堂—动态规划斜率优化

大家来到这一堂课&#xff0c;就说明大家已经学过函数了 直线方程&#xff1a;ykxb 大家可以算一算。 其实&#xff0c;在数学上&#xff0c;这玩意要分类讨论 那么&#xff0c;这唯一的交点就是我们要背出来的 直线最值 这像一个分段函数 其实&#xff0c;只有部分直线能提供…

docker-compose yaml指定具体容器网桥ip网段subnet

docker-compose 启动yaml有时可能的容器网段与宿主机的ip冲突导致宿主机上不了网&#xff0c;这时候可以更改yaml指定subnet 宿主机内网一般是192**&#xff0c;这时候容器可以指定172* version: 3.9 services:coredns:image: coredns/coredns:1.10.0container_name: coredns…

详解Qt添加外部库

在Qt项目中添加外部库是一项常见任务&#xff0c;无论是静态库还是动态库都需要正确的配置才能让项目顺利编译链接。以下是详细步骤和不同场景下的配置方法&#xff1a; 方法一&#xff1a;手动编辑.pro文件 添加头文件路径&#xff1a; 在Qt项目中的.pro文件中使用INCLUDEPAT…

IO_DAY7

1:实现2个终端之间的互相聊天 要求:千万不要做出来2个终端之间的消息发送是读一写的&#xff0c;一定要能够做到&#xff0c;一个终端发送n条消息&#xff0c;另一个终端一条消息都不回复都是没有问题的 终端A&#xff1a; #include<myhead.h> int main(int argc, char…

【YOLOv9改进[损失函数]】使用结合InnerIoU和Focaler的各种损失函数助力YOLOv9更优秀

目录 一 回归损失函数&#xff08;Bounding Box Regression Loss&#xff09; 1 Inner-IoU 2 Focaler-IoU&#xff1a;更聚焦的IoU损失 二 改进YOLOv9的损失函数 1 总体修改 ① utils/metrics.py文件 ② utils/loss_tal_dual.py文件 2 各种机制的使用 ① 使用结合Inn…

2024年MCN商业模式运营体系行业发展分析

【干货资料持续更新&#xff0c;以防走丢】 2024年MCN商业模式运营体系行业发展分析 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 mcn运营资料包&#xff08;完整资料包含以下内容&#xff09; 目录 MCN机构运营方案的概要&#xff1a; 一、MCN机构定位与目…

关于java分页功能以及传参规范

不用插件 //当前页码private static final Integer currentPage 2;//设置每页个数private static final Integer pageSize 5;Testpublic void test8() {//手写一个分页测试&#xff0c;不用插件List<Integer> list new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7…

GPT建模与预测实战

代码链接见文末 效果图&#xff1a; 1.数据样本生成方法 训练配置参数&#xff1a; --epochs 40 --batch_size 8 --device 0 --train_path data/train.pkl 其中train.pkl是处理后的文件 因此&#xff0c;我们首先需要执行preprocess.py进行预处理操作&#xff0c;配置参数…