力扣爆刷第1567之TOP100五连刷51-55(滑动窗口、零钱兑换、最小覆盖子串)

力扣爆刷第1567之TOP100五连刷51-55(滑动窗口、零钱兑换、最小覆盖子串)

文章目录

      • 力扣爆刷第1567之TOP100五连刷51-55(滑动窗口、零钱兑换、最小覆盖子串)
      • 一、239. 滑动窗口最大值
      • 二、41. 缺失的第一个正数
      • 三、LCR 140. 训练计划 II
      • 四、322. 零钱兑换
      • 五、76. 最小覆盖子串

一、239. 滑动窗口最大值

题目链接:https://leetcode.cn/problems/sliding-window-maximum/description/
思路:求滑动窗口最大值,需要维护一个队列,队列大小就是窗口大小,要能保证每次都可以获取最大值,只需要让入队时弹出小于当前元素的元素,这样可以保证队列一段添加元素,从另一端获取最大值。

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int[] res = new int[nums.length - k + 1];MyQueue queue = new MyQueue();int j = 0;for(int i = 0; i < nums.length; i++) {queue.add(nums[i]);if(i + 1 >= k) {res[j++] = queue.getMax();queue.remove(nums[i-k+1]);}}return res;}}class MyQueue {LinkedList<Integer> queue = new LinkedList<>();public MyQueue() {}void add(int v) {while(!queue.isEmpty() && v > queue.peekLast()) queue.pollLast();queue.addLast(v);}void remove(int v) {if(!queue.isEmpty() && queue.peekFirst() == v) queue.pollFirst();}int getMax() {return queue.peekFirst();}
}

二、41. 缺失的第一个正数

题目链接:https://leetcode.cn/problems/first-missing-positive/description/
思路:求缺失的第一个正数,要求时间复杂度o(n),本身不能排序,但是可以借助数组的索引来做一个映射关系,对于如何求缺失的第一个正数,对于固定长度的数组来说,如果数组中的元素值存在超出数组长度的情况,那么数组中就一定在[1, len]不是连续的,那么我们只需要把超出范围的给排除掉,然后把位于范围内的与数组的索引进行映射,但凡能映射上的,也给进行区别标识,比如设置为负数,然后再从头到尾遍历,第一个大于0的元素所对应的索引就是缺失的第一个正数。

class Solution {public int firstMissingPositive(int[] nums) {int k = nums.length+1;for(int i = 0; i < nums.length; i++) {if(nums[i] <= 0) nums[i] = k;}for(int i = 0; i < nums.length; i++) {int t = Math.abs(nums[i]);if(t < k) {nums[t-1] = -Math.abs(nums[t-1]);}}for(int i = 0; i < nums.length; i++) {if(nums[i] > 0) return i+1;}return k;}
}

三、LCR 140. 训练计划 II

题目链接:https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/description/
思路:本题为求倒数第N个节点,很简单,经典快慢指针,快指针先走N步,然后快慢同步走,当快指针抵达结尾时,慢指针指向的就是倒数第N个节点。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode trainingPlan(ListNode head, int cnt) {ListNode slow = head, fast = head;while(cnt > 0) {fast = fast.next;cnt--;}while(fast != null) {slow = slow.next;fast = fast.next;}return slow;}
}

四、322. 零钱兑换

题目链接:https://leetcode.cn/problems/coin-change/
思路:本题是完全背包,求装满背包所需物品的最少数量,完全背包不求排列组合数时是不讲究物品和背包的内外顺序的,求最小数量,定义dp[j]表示装满容量为j的背包所需的最少物品数量,那么对于每一个物品nums[i]来说,将其放入后,填满背包的最少数量为dp[j] = min(dp[j], dp[j - nums[i]] + 1),但要注意依赖的前一个位置,是否填充了物品。

**关于背包问题的小总结:**
01背包:先遍历物品后遍历背包,物品正序,背包逆序。正常背包装物品为dp[j] = Math.max(dp[j], dp[j-nums[i]] + nums[i])。求排列组合数为:p[j] += dp[j - nums[i]]。
完全背包:完全背包正常装物品不讲究物品和背包的顺序,求组合数:物品在外背包在内。求排列数:背包在外,物品在内。
class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount+1];Arrays.fill(dp, Integer.MAX_VALUE);dp[0] = 0;for(int i = 0; i < coins.length; i++) {for(int j = coins[i]; j <= amount; j++) {if(dp[j - coins[i]] == Integer.MAX_VALUE) continue;dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
}

五、76. 最小覆盖子串

题目链接:https://leetcode.cn/problems/minimum-window-substring/description/
思路:求一个字符串在另一个字符串中的最小覆盖子串,也是非常经典的题目,典型的使用滑动窗口的题,先用一个needmap记录下来所需的元素个数,然后维护一个滑动窗口,该窗口也有windowmap,然后一直扩大窗口,直到size相同开始缩小窗口并记录下来最小窗口即可。

class Solution {public String minWindow(String s, String t) {Map<Character, Integer> need = new HashMap<>();Map<Character, Integer> window = new HashMap<>();for(int i = 0; i < t.length(); i++) {need.put(t.charAt(i), need.getOrDefault(t.charAt(i), 0) + 1);}int valid = 0, min = Integer.MAX_VALUE, init = 0;int left = 0, right = 0;while(right < s.length()) {char rc = s.charAt(right++);if(need.containsKey(rc)) {window.put(rc, window.getOrDefault(rc, 0)+1);if(window.get(rc).equals(need.get(rc))) valid++;}while(valid == need.size()) {if(right - left < min) {min = right - left;init = left;}char lc = s.charAt(left++);if(need.containsKey(lc)) {if(need.get(lc).equals(window.get(lc))) valid--;window.put(lc, window.get(lc)-1);}}}return min == Integer.MAX_VALUE ? "" : s.substring(init, init+min);}
}

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

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

相关文章

录屏软件哪个好用?分享5款(2024最新)

随着网络时代的发展&#xff0c;电脑的使用频率也越来越高&#xff0c;还有近些年出现的网课、直播等&#xff0c;这让电脑的录屏功能显得更重要。随之而来的录屏软件也越来越多样化&#xff0c;选择一款好的软件是录屏至关重要的环节。 在数字浪潮汹涌的时代&#xff0c;录屏…

前端利用vue如何实现导入和导出功能.md

1. 前端利用vue如何实现导入和到处功能 1.1. 导入功能&#xff08;以导入Excel文件为例&#xff09; 1.1.1. 实现步骤: 1.1.1.1. 安装依赖: 首先&#xff0c;你需要安装处理Excel文件的库&#xff0c;如xlsx。1.1.1.2. 创建上传组件: 使用Element UI的<el-upload>组件或其…

【JavaScript脚本宇宙】从发票生成到网页保存:JavaScript PDF库指南

探索顶级JavaScript PDF库&#xff1a;高效处理PDF文档的利器 前言 随着数字化信息的普及和无纸化办公理念的深入&#xff0c;PDF文档因其高度兼容性和稳定性成为了存储、分享和展示信息的首选格式。为了满足不同用户对PDF文档生成和处理的需求&#xff0c;各类功能强大的Jav…

绘唐3一键追爆款文刻创作聚星文社

聚星文社是一个中国的文学社交平台&#xff0c;提供了一个让作家和读者相互交流和分享作品的平台。 在聚星文社&#xff0c;作家可以在平台上发布自己的作品&#xff0c;获得读者的阅读和评论&#xff0c;同时也可以与其他作家进行交流与学习。 点击下载即可 读者可以在平台上…

用质因数求解最大公约数(gcd)和最小公倍数(lcm)

用质因数求解最大公约数&#xff08;gcd&#xff09; 思路分析&#xff1a; 1、质因数&#xff1a;(素因数或质因子)他指的是能整除给定正整数的质数。例如&#xff1a;36可以分解为223*3&#xff0c;其中2和3就是质因数。 2、质因数求解最大公约数&#xff1a; 对每个数进行…

ai和数据分析常用工具:jupyer基本使用

jupyter使用 打开终端cmd windowr&#xff1a;在弹出的对话款里输入cmd&#xff0c;就会打开你的电脑终端。 虚拟环境搭建 不同项目或许需要的环境的版本或者包的版本不同&#xff0c;因此可以给指定项目创建指定的虚拟环境进行开发环境和所使用包的管理。 列出所有环境&a…

一、安全完善度等级SIL(Safety Integrity Level)介绍

目录 一、背景 二、定义 2.1 相关概念介绍如下&#xff1a; 2.2 扩展 2.3 注意事项 一、背景 在轨道交通行业中&#xff0c;安全完善度等级&#xff08;SIL&#xff0c;Safety Integrity Level&#xff09;是一个至关重要的概念&#xff0c;它用于评估安全相关系统&#x…

Linux基础IO操作详解

C文件IO相关接口 fopen函数 pathname: 要打开的文件名字符串mode: 访问文件的模式 模式描述含义“r”读文件不存在失败返回null“r”读写文件不存在打开失败返回null&#xff0c;文件存在则从头开始覆盖现有的数据&#xff08;不会清空数据&#xff09;“w”写文件不存在创建…

【报错】【Ubuntu】/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34‘ not found

1 报错 /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34 not found 2 分析 系统中的GNU C Library(glibc)版本不满足要求。 具体来说,该程序或库需要使用2.34版本的glibc,但系统中当前的glibc版本不满足这个要求。 首先,查看版本: strings /lib/x86_64-linux…

接口响应和预览id不一样

解决方案 让后端加上这个注解 ]sonserialize(using Tostringserializer.class) private Long id;

第6天:文件操作和异常处理

学习目标 掌握如何在Python中进行文件读写操作理解文件的打开模式学习如何处理文件中的数据理解异常处理的基本概念掌握使用try、except、else和finally进行异常处理 学习内容 1. 文件操作 在Python中&#xff0c;文件操作包括打开文件、读写文件内容和关闭文件。 文件的打…

马斯克公布xAI Grok-2大语言模型将于8月推出;GPT-5仍需时日

&#x1f989; AI新闻 &#x1f680; 马斯克公布xAI Grok-2大语言模型将于8月推出 摘要&#xff1a;7月1日&#xff0c;马斯克在X平台宣布&#xff0c;其人工智能初创公司xAI的新大语言模型Grok-2将于8月推出。此前&#xff0c;xAI已发布了Grok-1.5和Grok-1.5 Vision模型。马…

运营商如何通过PCDN技术提高用户服务?

着互联网的快速发展&#xff0c;用户对网络速度和质量的要求越来越高。为了满足这些需求&#xff0c;内容分发网络(CDN)成为了关键的基础设施。而在CDN技术中&#xff0c;PCDN(PersonalCDN)作为一种新兴的技术&#xff0c;为运营商和用户提供了新的解决方案。本文将重点介绍PCD…

Drools开源业务规则引擎(一)- 安装与介绍

文章目录 [toc] Drools开源业务规则引擎&#xff08;一&#xff09;- 安装与介绍0.何为规则引擎1.Drools介绍1.1.依赖模块1.2.规则引擎 2.Drools安装2.1.依赖导入2.2.规则的输入和输出类型输入类型输出类型 2.3.创建规则文件2.4.构建可执行规则库2.5.执行结果&#xff1a; 3.Dr…

FreeRTOS的任务操作

文章目录 3 FreeRTOS任务操作3.1 创建task3.2 删除task3.2.1 空闲&#xff08;idle&#xff09;任务&#xff08;守护任务&#xff09;3.2.2 钩子&#xff08;Hook&#xff09;函数 3.3 设置&#xff0c;获取&#xff0c;task优先级3.3.1 设置任务优先级3.3.2 获取任务优先级 3…

自动驾驶---Motion Planning之多段五次多项式

1 前言 在之前的博客系列文章中和读者朋友们聊过Apollo的 Motion Planning方案: 《自动驾驶---Motion Planning之LaneChange》 《自动驾驶---Motion Planning之Path Boundary》 《自动驾驶---Motion Planning之Speed Boundary》 《自动驾驶---Motion Planning之轨迹Path优化》…

Oracle 上机

--1.&#xff08;3分&#xff09;查找每个部门的最高工资员工编号及其下属信息。 select e2.empno,e1.* from emp e1 join ( select * from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno)) e2 on e1.mgr e2.empno; /* 2.&#xff08;5分&…

Spring Boot集成checkstyle快速入门Demo

1.什么是checkstyle&#xff1f; CheckStyle是一个帮助程序员来遵守一直的编码规范的工具。默认&#xff0c;它支持google 和sun 的java style guide。而且它是高度可配置的&#xff0c;允许自定义编码规范&#xff0c;并可以对各种IDE&#xff08;eclipse、Intellij&#xff…

昇思MindSpore学习笔记2-01 LLM原理和实践 --基于 MindSpore 实现 BERT 对话情绪识别

摘要&#xff1a; 通过识别BERT对话情绪状态的实例&#xff0c;展现在昇思MindSpore AI框架中大语言模型的原理和实际使用方法、步骤。 一、环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下…