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

力扣100题——子串

和为K的子数组

题目

560. 和为 K 的子数组 - 力扣(LeetCode)

思路

以一个数为基准,从这个数往后开始遍历相加,如果sum==k则count++。只要保证基准数不重复,就不会出现重复的子数组。

代码

class Solution {public int subarraySum(int[] nums, int k) {int count = 0;for(int i=0;i<nums.length;i++){int sum = 0;for(int j=i;j>=0;j--){sum = sum + nums[j];if(sum==k){count++;}}}return count;}
}

滑动窗口最大值

题目

239. 滑动窗口最大值 - 力扣(LeetCode)

思路

用双向链表保证最大值始终是链表第一个元素,每次滑动窗口的时候都把最大值保存在maxList中,最后将maxList转成数组即可

代码

public int[] maxSlidingWindow(int[] nums, int k) {LinkedList<Integer> list = new LinkedList<>();LinkedList<Integer> maxList = new LinkedList<>();list.add(nums[0]);for(int i=1;i<k;i++){if(nums[i]<list.getFirst()){list.addLast(nums[i]);}else{list.addFirst(nums[i]);}}maxList.add(list.getFirst());for(int i=k;i<nums.length;i++){int x = nums[i-k];//  System.out.println(list.contains(x)+"   "+(i-k));list.remove((Integer) i-k);if(nums[i]<list.getFirst()){list.addLast(nums[i]);}else{list.addFirst(nums[i]);}maxList.add(list.getFirst());}int []ans = new int[maxList.size()];for(int i=0;i<maxList.size();i++){ans[i] = maxList.get(i);}return ans;}

最小覆盖子串

题目

76. 最小覆盖子串 - 力扣(LeetCode)

思路

首先可以使用类似双指针的想法去理解,r,l和从最左端开始出发,r不断右移,当当前l和r的区间包括了t中所有字符时,记录下当前的l和r。再将l右移,重复上面的步骤,遍历完整个s串。

关键就在于怎么判断前l和r的区间包括了t中所有字符,可以使用两个数组分别记录当前区间中每个字符的个数和t中每个字符的个数。当每个字符个数相同或当前区间大于t中每个字符个数时,即为覆盖。

代码

public String minWindow(String S, String t) {char[] s = S.toCharArray();int m = s.length;int ansLeft = -1;int ansRight = m;int left = 0;int[] cntS = new int[128]; int[] cntT = new int[128]; for (char c : t.toCharArray()) {cntT[c]++;}for (int right = 0; right < m; right++) { cntS[s[right]]++; while (isCovered(cntS, cntT)) { if (right - left < ansRight - ansLeft) { ansLeft = left; ansRight = right;}cntS[s[left++]]--; // 左端点字母移出子串}}return ansLeft < 0 ? "" : S.substring(ansLeft, ansRight + 1);}private boolean isCovered(int[] cntS, int[] cntT) {for (int i = 'A'; i <= 'Z'; i++) {if (cntS[i] < cntT[i]) {return false;}}for (int i = 'a'; i <= 'z'; i++) {if (cntS[i] < cntT[i]) {return false;}}return true;}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 经验笔记:SSL证书
  • Stream插件相关的用法
  • 操作系统概述及特征
  • 回溯——7.子集II
  • 【蓝桥杯嵌入式(一)程序框架和调度器】
  • 《机器学习》 基于SVD的矩阵分解 推导、案例实现
  • AI基础 L1 Introduction to Artificial Intelligence
  • k8s技术架构
  • 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测
  • 【论文阅读】语义通信安全研究综述(2024)
  • Simulink:循环计数器 Counter Free-Running
  • echarts进度
  • LabVIEW焊缝视觉识别系统
  • 【PostgreSQL教程】PostgreSQL 高级篇之 LOCK(锁)
  • 【AI学习】聊两句深度学习的目标函数
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Angular 2 DI - IoC DI - 1
  • Angular 4.x 动态创建组件
  • C学习-枚举(九)
  • Fabric架构演变之路
  • FastReport在线报表设计器工作原理
  • FineReport中如何实现自动滚屏效果
  • go语言学习初探(一)
  • js作用域和this的理解
  • Redux系列x:源码分析
  • Vue小说阅读器(仿追书神器)
  • vue总结
  • 搞机器学习要哪些技能
  • 关于字符编码你应该知道的事情
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 山寨一个 Promise
  • 用 Swift 编写面向协议的视图
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (04)odoo视图操作
  • (6)STL算法之转换
  • (7)svelte 教程: Props(属性)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (面试必看!)锁策略
  • (十六)Flask之蓝图
  • (一)RocketMQ初步认识
  • (转)Sublime Text3配置Lua运行环境
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net CF下精确的计时器
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework杂记
  • .NET大文件上传知识整理
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚