编程平台有哪些/栾城seo整站排名
前言
挑战一个月刷完力扣的hot100,记录一下每题的思路~
这次是子串相关的题目
(1)560. 和为 K 的子数组
①暴力枚举,使用一个变量sum记录以l开头r结尾的情况
class Solution {public int subarraySum(int[] nums, int k) {int res=0;// 枚举每种情况for(int l=0;l<nums.length;l++){int sum=0; // l开头for(int r=l;r<nums.length;r++){ // r结尾sum+=nums[r];if(sum==k)res++; // 满足条件}}return res;}
}
②前缀和+map,map记录每种前缀和出现的次数。若位置i的前缀和为pre,map中存在pre-k的前缀和,即存在某位置到i的和为k,统计次数即可
class Solution {Map<Integer,Integer> map = new HashMap<>(); // 每种前缀和出现次数public int subarraySum(int[] nums, int k) {int res=0, pre=0;map.put(0,1);for(int i=0;i<nums.length;i++){pre+=nums[i]; // 开头到i的和// map中存在前缀和pre-k,即存在某个位置到i的和为kif(map.containsKey(pre-k))res+=map.get(pre-k);map.put(pre,map.getOrDefault(pre,0)+1); // 更新前缀和pre的次数}return res;}
}
(2)239. 滑动窗口最大值
①优先队列,记录值和下标,按值降序(越大越优先),每次移除下标越界元素,取最大值
class Solution {// 优先队列,存值和下标,按值降序,即越大优先级越高PriorityQueue<int[]> pq = new PriorityQueue<>((a,b)->Integer.compare(b[0],a[0]));List<Integer> res = new ArrayList<>();public int[] maxSlidingWindow(int[] nums, int k) {for(int i=0;i<k;i++)pq.offer(new int[]{nums[i],i});res.add(pq.peek()[0]); // 第一种情况for(int i=k;i<nums.length;i++){pq.offer(new int[]{nums[i],i});while(pq.peek()[1]<=i-k)pq.poll(); // 移除窗口外元素res.add(pq.peek()[0]); // 存最大值}return res.stream().mapToInt(Integer::intValue).toArray(); // 流式转换}
}
②单调递减双端队列。若l<r,且nums[l]<nums[r],在后续的窗口中不可能选到l。每次入队为靠后元素,若该元素大于队尾元素,队尾不可能再选到,直接出队。队列保留目前最大值和其后递减较小值。最大值移出滑动窗口时,将其出队
class Solution {List<Integer> res = new ArrayList<>();Deque<Integer> queue = new ArrayDeque<>(); // 单调递减双端队列public int[] maxSlidingWindow(int[] nums, int k) {for(int i=0;i<nums.length;i++){// 移除窗口的元素刚好为队头,出队if(i>=k&&queue.peekFirst()==nums[i-k])queue.pollFirst();// 加入当前元素,满足单调递减while(!queue.isEmpty()&&queue.peekLast()<nums[i])queue.pollLast();queue.addLast(nums[i]);// 遍历到k-1时开始取队头,即目前最大值if(i>=k-1)res.add(queue.peekFirst());}return res.stream().mapToInt(Integer::intValue).toArray();}
}
③思路同上一种,单调队列记录下标,用于队头下标越界判断,更好理解
class Solution {List<Integer> res = new ArrayList<>();Deque<Integer> deque = new ArrayDeque<>(); // 单调递减双端队列public int[] maxSlidingWindow(int[] nums, int k) {for(int i=0;i<nums.length;i++){// 加入当前元素,满足单调递减while(!deque.isEmpty()&&nums[deque.peekLast()]<nums[i])deque.pollLast();deque.addLast(i);// 队头出界,移出if(i>=k&&deque.peekFirst()<=i-k)deque.pollFirst();// 遍历到k-1时开始取队头,即目前最大值if(i>=k-1)res.add(nums[deque.peekFirst()]);}return res.stream().mapToInt(Integer::intValue).toArray();}
}
④分组+最大前后缀。k个数一组,计算每组最大前后缀。窗口起始值i,若为k的整数倍,即窗口恰好为一组;否则,窗口跨越两个分组,取前一个分组最大后缀和后一个分组最大前缀的最大值
class Solution {List<Integer> res = new ArrayList<>();public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;int[] prefixMax=new int[n], suffixMax=new int[n];for(int i=0,j=n-1;i<n;i++,j--){// 下标为k整数倍,组头if(i%k==0)prefixMax[i]=nums[i]; else prefixMax[i]=Math.max(prefixMax[i-1],nums[i]);// 数组最后一位或下标后一位为k整数倍,组尾if(j==n-1||(j+1)%k==0)suffixMax[j]=nums[j]; else suffixMax[j]=Math.max(suffixMax[j+1],nums[j]);}// i为窗口起始位置// i为k整数倍,窗口恰为一个分组// 否则窗口跨越两个分组,取前一个分组最大后缀和后一个分组最大前缀的最大值for(int i=0;i<=n-k;i++)res.add(Math.max(suffixMax[i],prefixMax[i+k-1]));return res.stream().mapToInt(Integer::intValue).toArray();}
}
(3)76. 最小覆盖子串
滑动窗口。map和count分别记录t和滑动窗口的字符数,check判断count不小于map,即滑动窗口满足条件。r扩张直到check为true,然后收缩l直到不满足,记录最短滑动窗口
class Solution {Map<Character,Integer> map = new HashMap<>();Map<Character,Integer> count = new HashMap<>();public String minWindow(String s, String t) {if(s.length()<t.length())return ""; // 长度不够int l=0,r=-1,sLen=s.length(),tLen=t.length(); // 滑动窗口int resL=-1,resR=-1; // 结果下标// t中字符计数for(char c:t.toCharArray())map.put(c,map.getOrDefault(c,0)+1);// s滑动窗口while(r<sLen){r++; // 扩张if(r<sLen&&map.containsKey(s.charAt(r)))count.put(s.charAt(r),count.getOrDefault(s.charAt(r),0)+1);while(check()&&l<=r){if(resL==-1||r-l<resR-resL){resL=l;resR=r;}if(map.containsKey(s.charAt(l)))count.put(s.charAt(l),count.getOrDefault(s.charAt(l),0)-1);l++; // 收缩}}return resL==-1?"":s.substring(resL,resR+1);}// count不小于map个数boolean check(){for(Character c:map.keySet()){if(count.getOrDefault(c,0)<map.get(c))return false;}return true;}
}
总结
①子串。双指针暴力枚举;map记录每种前缀和出现次数,统计pre-k存在次数
②和为K的子串。优先队列记录值和下标,值大优先,下标限界;单调递减双端队列,位于前面且更小的值不会再被选中;分组+最大前后缀,预处理分组的前后缀,滑动窗口恰为分组,或跨越两个分组
③滑动窗口最大值。滑动窗口,r扩张找到满足的情况,l收缩尽可能最短
相关文章:

LeetCode Hot100 - 子串篇
前言 挑战一个月刷完力扣的hot100,记录一下每题的思路~ 这次是子串相关的题目 (1)560. 和为 K 的子数组 ①暴力枚举,使用一个变量sum记录以l开头r结尾的情况 class Solution {public int subarraySum(int[] nums, int k) {int r…...

【Android】Convenient ADB Commands
Install adb install -r <path>Uninstall adb uninstall <pkg>Start adb shell am start -n <pkg>/.SplashActivityStop adb shell am force-stop <pkg>Reset adb shell pm clear <pkg>Reboot adb rebootShutdown adb reboot -p...

elementUI 时间控件控制时间选择
选择时间大于当前月或小于2024年一月禁止选择 <el-form-item label"成交月份:" label-width"105px" ><div class"block"><el-date-pickerv-model"formData.deal_month"type"month":picker-options"pick…...

什么是x86架构,什么是arm架构
什么是 x86 架构? x86 架构是一种经典的指令集架构(ISA),最早由英特尔在 1978 年推出,主要用于 PC、服务器等领域。 它是一种复杂指令集计算(CISC)架构,支持大量的复杂指令和操作&…...

c语言水仙花,超简单讲解
效果 3或者大于3位数 每一位的位数次方相加等于 自身 例如 153 13 53 33 结果为112527 153 1634: 计算过程: 14643444112968125616341^4 6^4 3^4 4^4 1 1296 81 256 16341464344411296812561634 过程 求得单独将所有位数的正数拎出来…...

Flutter 13 网络层框架架构设计,支持dio等框架。
在移动APP开发过程中,进行数据交互时,大多数情况下必须通过网络请求来实现。客户端与服务端常用的数据交互是通过HTTP请求完成。面对繁琐业务网络层,我们该如何通过网络层架构设计来有效解决这些问题,这便是网络层框架架构设计的初…...

Python小白学习教程从入门到入坑------第二十课 闭包修饰器(语法基础)
一、递归函数 1.1 基本信息 递归函数是指一个函数在其定义中直接或间接地调用了自身 递归在解决许多问题(如树的遍历、图的搜索、数学中的分治算法等)时非常有用 在Python中,递归函数可以通过简单的语法来实现 然而,使用递归…...

Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件
Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件 可视区域没超过当前屏幕高度时候只显示三个菜单效果 可视区域超过当前屏幕高度时,显示可回到顶部菜单的,当然这个菜单显示条件可以自定义,根据需求设置 然后将这个整体功能创建为一个全局组件 代…...

如何配置,npm install 是从本地安装依赖
在 Node.js 中,要使npm install从本地安装依赖,可以按照以下步骤进行配置: 一、准备本地依赖包 确保你有本地的依赖包。这个依赖包可以是一个包含package.json文件的文件夹,或者是一个已经打包好的.tgz文件。 二、使用相对路径…...

Python画图3个小案例之“一起看流星雨”、“爱心跳动”、“烟花绚丽”
源码如下: import turtle # 导入turtle库,用于图形绘制 import random # 导入random库,生成随机数 import math # 导入math库,进行数学计算turtle.setup(1.0, 1.0) # 设置窗口大小为屏幕大小 turtle.title("流星雨动画&…...

Knife4j配置 ▎使用 ▎教程 ▎实例
knife4j简介 支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试.参数和格式都…...

电子电气架构 --- 车载芯片现状
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧…...

Unity 二次元三渲二
三渲二 注意:Unity必须是2022.3LTS及以上和URP项目!!! 下载三渲二插件 【如何将原神的角色导入Unity】全网最细致教程,全程干货。不使用任何收费插件,使用Spring Bone对头发和衣服进行物理模拟。_原神 步…...

echart实现地图数据可视化
文章目录 [TOC](文章目录) 前言一、基本地图展示2.数据可视化 总结 前言 最近工作安排使用echarts来制作图形报表,记录一下我的步骤,需求呈现一个地图,地图显示标签,根据业务指标值给地图不同省市填充不同颜色,鼠标放…...

网关三问:为什么微服务需要网关?什么是微服务网关?网关怎么选型?
文章整体介绍 本文旨在解答关于微服务网关的三个核心问题: 1)为什么需要网关?也即在何种场景下应采用微服务网关以优化系统架构; 2)什么是微服务网关?主要讲构成微服务网关的关键能力,包括但…...

Mybatis-plus解决兼容oracle批量插入
本博客借鉴网上很多大佬的答案,东拼西凑,最终在项目中完成批量插入,仅供参考~~~ 1. 自定义SQL注入器 新建一个名为EasySqlInjector的类,继承DefaultSqlInjector。 public class EasySqlInjector extends DefaultSqlInjector {O…...

Kaggle竞赛——灾难推文分类(Disaster Tweets)
目录 1. 准备工作2. 资源导入3. 数据处理4. 绘制词云图5. 数据可视化5.1 词数和字符数可视化5.2 元特征可视化5.3 类别可视化 6. 词元分析6.1 一元语法统计6.2 多元语法统计 7. 命名实体识别8. 推文主题提取9. 构建模型9.1 数据划分与封装9.2 模型训练与验证 10. 模型评估11. 测…...

SC2601音频编解码器可pin to pin兼容ES8311
SC2601 是一款低功耗单声道音频编解码器,具有全差分输出,支持在全差分配置下可编程模拟输入。可pin to pin兼容ES8311。 录音路径包含一个全差分输入,低噪声可编程增益放大器和自动增益控制(ALC)。在录音过程中,通过内…...

通用AT指令
1、查询SIM卡状态 ATCPIN?2、查询信号强度 ATCSQ //99,99 表示无信号3、查询IMEI ATCGSN4、查询4G/5G模式 ATCOPS? //7表示在4G模式,13表示在5G模式5、设置接入点 ATCGDCONT1,"IP","uninet" //联通 ATCGDCONT1,"IP","…...

二进制狼群算法
本文所涉及所有资源均在 传知代码平台 可获取。 目录 一、背景及意义介绍 背景 意义...

STL——list的介绍和使用
前言 本篇博客我们继续来介绍STL的内容,这次我们要介绍的是list这个容器,可以简单地理解为顺序表,当然和我们之前学过顺序表还是有区别的,具体内容大家可以继续往下阅读,下面进入正文。 1. list简介 1.list是一种可…...

二百七十六、ClickHouse——Hive和ClickHouse非常不同的DWS指标数据SQL语句
一、目的 在完成数据之后对业务指标进行分析,Hive和ClickHouseSQL真不一样 二、部分业务指标表 2.1 统计数据流量表1天周期 2.1.1 Hive中原有代码 2.1.1.1 Hive中建表语句 --1、统计数据流量表——动态分区——1天周期 create table if not exists hurys_d…...

Elasticsearch Date类型,时间存储相关说明
本文介绍了在SpringBoot中处理Elasticsearch中日期时间格式的问题。当时间输出为UTC格式并存在时区差异时,可通过设置字段格式如yyyy-MM-dd HH:mm:ss并指定时区为GMT8来解决。存储Date类型数据时,可以使用JSON库如json-lib, fastjson, Jackson或gson进行…...

mathorcup2024台风 我all in ai
三个问题,力大砖飞。 不建物理模型,直接all in好吧 第一个故意无监督 第二个LSTMCNN注意力,刚好时间空间 第三个在第二个上加了个transfomer ,然后LSTM变双向,增加层数(基线模型选的经验公式,少…...

android 10 后台启动activity
摘要:Android 10(API 级别 29)及更高版本会限制应用何时可以启动 activity 背景。这些限制有助于最大限度地减少对用户的干扰, 让用户能够更好地控制其屏幕上显示的内容。本文以此为出发点,基于展锐平台对系统代码进行…...

文案创作新思路:Python与文心一言API的完美结合
在这个信息爆炸的时代,内容创作似乎成了一项需要魔法才能完成的任务。不过,别担心!今天,我们将向你介绍一种新的“魔法”工具——百度文心一言 API。这款大语言模型不仅能与人对话互动,还能高效便捷地协助你获取创意灵…...

CentOS 7 上安装 MySQL 8.0 教程
🌟 你好 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...

Chromium HTML5 新的 Input 类型url对应c++
一、Input 类型: url url 类型用于应该包含 URL 地址的输入域。 在提交表单时,会自动验证 url 域的值。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body&g…...

java多线程编程(二)一一>线程安全问题, 单例模式, 解决程线程安全问题的措施
引言: 如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的 线程安全问题的原因: 一.操作系统的随机调度 : 二.多个线程修改同一个变量: 三.修改操作不是…...

Leetcode 213. 打家劫舍 II 动态规划
原题链接:Leetcode 213. 打家劫舍 II class Solution { public:int rob(vector<int>& nums) {int n nums.size();if (n 1)return nums[0];if (n 2)return max(nums[0], nums[1]);// 如果偷了第一家,就不能偷最后一家int dp[n - 1];dp[0] …...