秋招算法刷题7

news2024/11/24 11:42:26

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.coloradmin.cn/o/1588936.html

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

相关文章

【报错】TypeError: Cannot read property ‘meta‘ of undefined

&#x1f608;解决思路 首先这里很明显我们能看到是缺少该参数&#xff1a;meta。 但是经过查找后发现和该参数无关。 &#x1f608;解决方法 后来我上网搜了下&#xff0c;网上的回答大部分偏向于是package.json这个文件中的tabBar.list数组对象只有一条的问题。 网上的大…

Nginx小册(博客笔记迁移)

nginx基础 1.常用命令 nginx -v #查看版本 ps -ef | grep nginx #输出linux进程、 nginx #启动nginx进程 nginx -s reload #重载配置 nginx -s stop # 停止进程 nginx -t # 检查是否有语法错误&#xff0c;以及配置文件地址2.nginx的配置文件 # 用户组的设置 windows上不生…

Llama2模型本地部署(Mac M1 16G)

环境准备 环境&#xff1a;Mac M1 16G、Conda Conda创建环境配置 使用Anaconda-Navigator创建python 3.8环境 切换到新建的conda环境&#xff1a; conda activate llama38 llama.cpp 找一个目录&#xff0c;下载llama.cpp git clone https://github.com/ggerganov/llama.…

Java后端平台的搭建

后端开发准备工作(配置Tomcat) 安装tomcat安装jdk 配置JAVA HONE(到java目录),path(到 bin 目录)解压Tomcat进入到bin目录,双击startup.bat启动tomcat访问 ip端口在conf目录的 server.xml配置端口 后端平台的搭建 创建Web项目(前提搭建好Tomcat配置) 注:一定要提前配置好Ma…

Android-NDK的linux交叉编译环境

NDK工具包下载 NDK 下载 | Android NDK | Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例&#xff0c;下载后将压缩包解压至/usr目录下 CMakeLists编译选项设置 编译平台变量判断条件中增加一下android条件…

Okhttp全链路监控

目标&#xff1a; 1&#xff09;.监控网络请求的各个阶段 2&#xff09;获取每一个阶段的耗时和性能&#xff0c;用于性能分析。包括dns解析&#xff0c;socket连接时间&#xff0c;tls连接时间&#xff0c;请求发送时间&#xff0c;服务器接口处理时间&#xff0c;应答传输时…

Windows搭建LightPicture图片管理网站结合内网穿透实现公网访问本地图片

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…

数字证书在网络安全中的关键作用与日常应用

在当今数字化的时代&#xff0c;网络安全问题日益凸显&#xff0c;保护数据安全和用户隐私成为了人们关注的焦点。数字证书作为一种重要的网络安全技术&#xff0c;其在网络安全中扮演着关键的角色&#xff0c;并且在我们的日常生活中有着广泛的应用。现在给大家介绍简单介绍下…

数据结构——链表变形

数据结构——链表变形 带尾指针的链表尾插的变化 循环双向双向循环 我们在上次已经了解了单链表&#xff0c;今天我们来了解一下链表的各种变形&#xff0c;如果还没有了解过上面单链表的小伙伴可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/article/details/13…

避坑指南: “低代码开发平台”怎么选看这篇!附案例参考

从事TOB行业 9 年&#xff0c;深入体验过 10 余款低代码产品。 下面基于我的个人认知给大家讲一讲&#xff1a; 低代码开发平台该如何选&#xff1f;从哪些维度可以判断低代码平台适合你的企业&#xff1f;多家企业采用低代码平台的实践案例&#xff01; 目前市面上有超过 2…

vue快速入门(十)v-bind动态属性绑定

注释很详细&#xff0c;直接上代码 上一篇 新增内容 图片切换逻辑动态绑定的完整写法与简写方法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

IDM激活步骤-亲测可用

前言&#xff1a;我试了3种方法&#xff0c;仅以下方法激活成功&#xff0c;其他都是30天试用 使用步骤&#xff1a; 1.从官网下载IDM并安装&#xff1a;https://www.internetdownloadmanager.com/ 2.下载激活工具&#xff1a;https://wwif.lanzouw.com/iSY2N16s81xi &#…

2024年第十四届MathorCup数学应用挑战赛B题解题思路

B题https://mbd.pub/o/bread/ZZ6Wm5dx 问题1:对于附件I(Pre_test文件夹)给定的三张甲骨文原始拓片图 片进行图像预处理&#xff0c;提取图像特征&#xff0c;建立甲骨文图像预处理模型&#xff0c;实现对 甲骨文图像干扰元素的初步判别和处理。 针对问题1&#xff0c;对于附件…

备战蓝桥杯---刷杂题2

显然我们直接看前一半&#xff0c;然后我们按照斜行看&#xff0c;我们发现斜行是递增的&#xff0c;而同一行从左向右也是递增的&#xff0c;因此我们可以直接二分&#xff0c;同时我们发现对称轴的数为Ck,2k. 我们从16斜行枚举即可 #include<bits/stdc.h> using name…

文心一言 VS 讯飞星火 VS chatgpt (235)-- 算法导论17.2 3题

三、假定我们不仅对计数器进行增 1 操作&#xff0c;还会进行置 0 操作(即将所有位复位)。设检测或修改一个位的时间为 Θ(1) &#xff0c;说明如何用一个位数组来实现计数器&#xff0c;使得对一个初值为 0 的计数器执行一个由任意 n 个 INCREMENT 和 RESET 操作组成的序列花费…

【每日练习】二叉树

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;二叉树 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 文章目录 一、100. 相同的树1. 题目简介2.…

程序员需要考证吗?程序员考证真的有用吗?

程序员需要考证吗?程序员考证真的有用吗? 软考简介 软考&#xff0c;即软件设计师考试&#xff0c;是由中国人事部主管的一项专业技术资格考试。通过软考&#xff0c;考生可以获得软件设计师等级证书&#xff0c;这是国家认可的专业技术资格证书之一。软考作为我国软件行业的…

docker安装华为高斯-opengauss

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

【XR806开发板试用】自带mqtt的调试教学

1、下载代码 mkdir xr806_openharmony cd xr806_openharmony repo init -u ssh://gitgitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml repo sync -c repo forall -c git lfs pull **最近仓库在整合&#xff…

软件设计师-基础知识科目-算法设计与分析8

八、算法设计与分析&#xff1a; 常见算法&#xff1a; 回溯方法&#xff1a; 用深度优先的探索问题的解空间。应用场景&#xff1a;N皇后问题。&#xff08;背&#xff09; 分支界限法&#xff1a; 用广度优先的探索问题的解空间&#xff0c;采用的是分支界限法算法设计策…