秋招算法刷题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.rhkb.cn/news/311303.html

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

相关文章

VR紧急情况模拟|V R体验中心加盟|元宇宙文旅

通过VR技术实现紧急情况模拟&#xff0c;提升安全应急能力&#xff01; 简介&#xff1a;面对突发紧急情况&#xff0c;如火灾、地震、交通事故等&#xff0c;正确的反应和应对能够有效减少伤害和损失。为了提高人们在紧急情况下的应急能力&#xff0c;我们借助先进的虚拟现实…

linux项目部署 解决Nginx浏览器刷新出现404,但是不刷新是能够正常请求成功

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 提示&#xff1a;部署成功&#xff0c;访问登录页面登录也成功&#xff0c;强制刷新浏览器报404问题 进入到系统 刷新页面 解决流程 参考如图&#xff0c;再下面添加这条配置信息 location / {try_file…

Qt---控件的基本属性

文章目录 enabled(控件可用状态)geometry(位置和尺寸)简单恶搞程序 windowIcon(顶层 widget 窗口图标)使用 qrc 机制 windowOpacity(窗口的不透明值)cursor(当鼠标悬停空间上的形状)自定义鼠标图标 toolTip(鼠标悬停时的提示)focusPolicy(控件获取焦点的策略)styleSheet(通过CS…

算法练习第15天|226.翻转二叉树

226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&am…

EDI是什么:EDI系统功能介绍

EDI全称Electronic Data Interchange&#xff0c;中文名称是电子数据交换&#xff0c;也被称为“无纸化贸易”。EDI实现企业间&#xff08;B2B&#xff09;自动化通信&#xff0c;帮助贸易伙伴和组织完成更多的工作、加快物流时间并消除人为错误。 目前国内企业实现EDI通信大多…

智慧公厕系统厂家,打造创新性智慧公厕的窍门

智慧公厕系统是利用物联网、大数据、云计算、网络通信、自动化控制等技术&#xff0c;监测公厕内部多个方面的变化&#xff0c;从而实现公厕的智能化管理。通过智慧公厕云管理平台&#xff0c;可以实现厕位空余智能引导、环境监测、资源消耗监测、安全防范管理等多种功能&#…

创建spring项目

新建spring项目时&#xff0c;而Spring3.X版本不支持JDK8&#xff0c;JDK11&#xff0c;最低支持JDK17。当JDK版本低于17时&#xff0c;选择2.x的版本。无法选择2.x的版本&#xff0c;可从pom.xml处修改。

mybatis后,将代码生成器生成的代码合并到原有的项目中去

【明白了解&#xff1a; 1&#xff09;接口只定义方法&#xff0c;&#xff08;告诉你要做什么&#xff09; 2&#xff09;具体的逻辑都写在Impl 实现类里】 3&#xff09;【不是问题 &#xff0c; idea2023对界面进行了优化&#xff0c;变好看了 】 一、鱼皮操作 1.1拖拽…

<计算机网络自顶向下> CDN

视频服务挑战 规模性异构性&#xff1a;不同用户有不同的能力&#xff08;比如有线接入和移动用户&#xff1b;贷款丰富和受限用户&#xff09;解决方法是&#xff1a;分布式的应用层面的基础设施CDN 多媒体&#xff1a;视频 视频是固定速度显示的一系列图像的序列&#xff…

优惠券布局的最终方案------css属性mask

先贴图&#xff1a; 以上这些都是通过mask去实现出来&#xff1a; <!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档&#xff0c;发现居然还能打包为二进制&#xff0c;这样太厉害了吧&#xff01; 先执行这个 composer require webman/console ^1.2.24 安装这个console的包&#xff0c;然后 执行 php webman build:bin 8.1 结果谁想到它报错提示&#xff1a; 好…

清明三天,用Python赚了4万?

每年4月&#xff0c;是Python圈子里接私活的旺季&#xff0c;特别是在节假日这种数据暴增的时间段&#xff0c;爬虫采集、逆向破解类的私活订单会集中爆发&#xff0c;量大价高。几乎所有的圈内人都在趁着旺季接私活。 正好&#xff0c;我昨天就做了一单爬虫逆向私活&#xff…

自动化测试-如何优雅实现方法的依赖

在复杂的测试场景中&#xff0c;常常会存在用例依赖&#xff0c;以一个接口自动化平台为例&#xff0c;依赖关系&#xff1a; 创建用例 --> 创建模块 --> 创建项目 --> 登录。 用例依赖的问题 • 用例的依赖对于的执行顺序有严格的要求&#xff0c;比如让被依赖的方…

如何使用Fiddler做弱网测试?

1、打开Fiddler工具&#xff0c;点击Rules-Customize Rules 2、打开了一个配置文件&#xff0c;ctrlF搜索Delay sends by 300ms per KB uploaded&#xff0c; 3、修改发送延迟和下载延迟的时间&#xff0c;可以修改的大一些&#xff0c;越大延迟越久&#xff0c;修改后保存 4、…

(GPT-PLUS,RawChat,choose-car,Kimi,智谱清言)分享5个好用的ChatGPT

目录 1、GPT-PLUS拼车 2、RawChat公益站点 3、GPT-PLUS共享 4、choose-car 5、AI提示器 6、Kimi.ai - 帮你看更大的世界 7、智谱清言 1、GPT-PLUS拼车 https://home.topai.vip/list GPT-PLUS拼车 TOPAI宇宙 | Link3 2、RawChat公益站点 https://sharedchat.cn/ 3、GPT-PLUS共享…

我用了6年的 SpringBoot 项目部署方案,稳得一批!

本篇和大家分享的是springboot打包并结合shell脚本命令部署&#xff0c;重点在分享一个shell程序启动工具&#xff0c;希望能便利工作&#xff1b; profiles指定不同环境的配置 maven-assembly-plugin打发布压缩包 分享shenniu_publish.sh程序启动工具 linux上使用shenniu_pub…

【MATLAB源码-第54期】基于白鲸优化算法(WOA)和遗传算法(GA)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1.白鲸优化算法&#xff08;WOA&#xff09;&#xff1a; 白鲸优化算法是一种受白鲸捕食行为启发的优化算法。该算法模拟了白鲸群体捕食的策略和行为&#xff0c;用以寻找问题的最优解。其基本思想主要包括以下几点&#xff…

Python统计分析库之statsmodels使用详解

概要 Python statsmodels是一个强大的统计分析库,提供了丰富的统计模型和数据处理功能,可用于数据分析、预测建模等多个领域。本文将介绍statsmodels库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装statsmodels库非常简单,可以使用pip命令进行安装:…

4.配置USART串口实现printf打印

通过TTL转USB实现电脑和单片机连通,是我们调试必不可少的工具 查看原理图,使用USART1,它们的TX和RX分别在PA9和PA10 新建Usart.c存放串口模块的初始化 这段代码是复制了正点原子的工程,添加到前面 #if SYSTEM_SUPPORT_OS #include "includes.h" //ucos 使用 …

记录PS学习查漏补缺

PS学习 PS学习理论快捷键抠图PS专属多软件通用快捷键 PS学习 理论 JPEG &#xff08;不带透明通道&#xff09; PNG (带透明通道) 快捷键 抠图 抠图方式 魔棒工具 反选选中区域 CtrlShiftI&#xff08;反选&#xff09; 钢笔抠图注意事项 按着Ctrl单击节点 会出现当前节…