每天刷两道题——第十一天

1.1滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]

在这里插入图片描述

优先队列

优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。
在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出,他和队列不同的就在于我们可以自定义其中数据的优先级,让优先级高的排在队列前面,优先出队。

python的heapq堆

堆是一个二叉树,有两种堆,最大堆与最小堆。 heapq库中的堆默认是最小堆
1.最小堆,树中各个父节点的值总是小于或等于任何一个子节点的值。
2.最大堆,树中各个父节点的值总是大于或等于任何一个子节点的值。

import heapq
q=heapq.heapify([3,6,4,1])  #将列表转化为堆
heapq.heappush(q,item)  #往堆q里面添加元素item
heapq.heappop(q) #删除q中顶部元素
heapq.heapreplace(q,100)  #删除顶部元素,加入新值100
#比较77和q中顶部元素,77如果大,删除并返回第一个元素,如果小,返回77,原堆不变
heapq.heappushpop(q,77)  
heapq.nlargest(n,q/[3,6,4,1])  #返回堆中最大的前n个
heapq.nsmallest(n,q/[3,6,4,1])  #返回堆中最小的前n个

代码
返回最大值,所以优先级采用负数

    def maxSlidingWindow(self,nums,k):n=len(nums)#heapq默认为小根堆,我们要找最大值,所以使用-nums[i]为优先级#-nums[i]为优先级  i为数据下标作为数据传入,前k个数据q=[(-nums[i],i) for i in range(k)] heapq.heapify(q)    #将列表转化为堆res=[-q[0][0]]  #q[0]=(-3,-1) -q[0][0]=3 第一个滑动窗口的最大值for i in range(k,n):heapq.heappush(q,(-nums[i],i))  #添加新元素#如果数据出现在滑动窗口的左侧将其从堆中删除while q[0][1]<=i-k:  #i是滑动窗口的右侧,i-k是滑动窗口的左侧heapq.heappop(q)res.append(-q[0][0])  #存储栈顶的元素return res

1.2最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
注意:
对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量
如果 s 中存在这样的子串,我们保证它是唯一的答案

输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。

枚举

for i,item in enumerate([2,3,4]):print(i,item)
0 2
1 3
2 4for i,item in enumerate([2,3,4],start=10):print(i,item)
10 2
11 3
12 4

代码

    def minWindow(self, s: str, t: str) -> str:need = collections.defaultdict(int)for c in t:need[c] += 1  needCnt = len(t)i = 0  # 记录起始位置res = (0, float('inf'))  # 用两个元素,方便之后记录起终点# 三步骤:# 1. 增加右边界使滑窗包含tfor j, c in enumerate(s):if need[c] > 0:needCnt -= 1need[c] -= 1  # 这行放在外面不可以,看19行 need[c] == 0# 2. 收缩左边界直到无法再去掉元素   !注意,处理的是iif needCnt == 0: #此时已经包含了t所需的所有元素while True:c = s[i]if need[c] == 0:  # 表示再去掉就不行了(need>0)breakelse:need[c] += 1i += 1if j - i < res[1] - res[0]:  # 这里是否减一都可以,只要每次都是这样算的就行,反正最后也是输出子串而非长度res = (i, j)# 3. i多增加一个位置,准备开始下一次循环(注意这步是在 needCnt == 0里面进行的 )need[s[i]] += 1needCnt += 1  # 由于 移动前i这个位置 一定是所需的字母,因此NeedCnt才需要+1i += 1return "" if res[1] > len(s) else s[res[0]: res[1] + 1]

参考代码
参考博客
参考博客1
参考博客2

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

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

相关文章

面试宝典之微服务框架面试题

S1、集群与分布式有啥区别&#xff1f; &#xff08;1&#xff09;相同点&#xff1a; 分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。 &#xff08;2&#xff09;不同点&#xff1a; 分布式是指将业务系统进行拆分&#xff0c;即分布式的每一个…

Pycharm中如何配置python环境(conda)

首先在pycharm中点击 "File" > "Settings" 再次点击如下操作&#xff1a; 点击Python Interpreter的最右侧按钮&#xff0c;点击Show All... 找到python文件 最后点击OK

若依项目的table列表中对每一个字段增加排序按钮(单体版和前后端分离版)

一、目标&#xff1a;每一个字段都添加上下箭头用来排序 只需要更改前端代码&#xff0c;不需要更改后端代码&#xff0c;后面会讲解原理 二、单体版实现方式&#xff1a; 1.在options中添加sortable:true 2.在需要排序的字段中添加sortable:true 三、前后端分离版 1.el-tab…

Open CASCADE学习|非线性方程组

非线性方程组是一组包含非线性数学表达式的方程&#xff0c;即方程中含有未知数的非线性项。解这类方程组通常比解线性方程组更为复杂和困难。 非线性方程组在很多领域都有应用&#xff0c;例如物理学、工程学、经济学等。解决非线性方程组的方法有很多种&#xff0c;包括数值…

面试题-DAG 有向无环图

有向无环图用于解决前后依赖问题&#xff0c;在Apollo中用于各个组件的依赖管理。 在算法面试中&#xff0c;有很多相关题目 比如排课问题&#xff0c;有先修课比如启动问题&#xff0c;需要先启动1&#xff0c;才能启动2 概念 顶点&#xff1a; 图中的一个点&#xff0c;比…

09、Kafka ------ 通过修改保存时间来删除消息(retention.ms 配置)

目录 通过修改保存时间来删除消息★ 删除指定主题的消息演示1、修改kafka检查过期消息的时间间隔2、修改主题下消息的过期时间3、查看修改是否生效4、先查看下主题下有没有消息5、添加几条消息看效果6、查看消息是否被删除 ★ 恢复主题的retention.ms配置1、先查看没修改前的te…

【开源】基于JAVA语言的教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

云平台架构知识点总结

云平台架构 内部特供 版权所有 翻版必究 项目1 云计算的认知与体验 1.1 云计算定义 ​ 维基百科定义:云计算将IT相关的能力以服务的方式提供给用户&#xff0c;允许用户在不了解提供服务的技术﹑没有相关知识以及设备操作能力的情况下&#xff0c;通过Internet 获取需要的…

浅谈有源滤波在某棉纺企业低压配电室节能应用

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 0引言 在电力系统中&#xff0c;谐波的根本原因是非线性负载。由于电子设备、变频器、整流器等。在棉纺企业的大部分设备中被广泛使用&#xff0c;因此会产生大量的谐波电流。我公司的环锭纱线和筒车间的配电设备受到谐波的影…

c语言:输入成绩,统计不及格人数|练习题

一、题目 输入学生成绩&#xff0c;统计不及格的学生人数 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> //题目&#xff1a;输入成绩&#xff0c;统计不及格人数 //思考分析 //1、由于学生人数是未知数&#xff0c;所以可以在输入时&#xff0c;以0…

TextDiffuser-2:超越DALLE-3的文本图像融合技术

概述 近年来&#xff0c;扩散模型在图像生成领域取得了显著进展&#xff0c;但在文本图像融合方面依然存在挑战。TextDiffuser-2的出现&#xff0c;标志着在这一领域的一个重要突破&#xff0c;它成功地结合了大型语言模型的能力&#xff0c;以实现更高效、多样化且美观的文本…

前端开发Docker了解

1&#xff0c;docker简介 docker主要解决了最初软件开发环境配置的困难&#xff0c;完善了虚拟机部署的资源占用多&#xff0c;启动慢等缺点&#xff0c;保证了一致的运行环境&#xff0c;可以更轻松的维护和扩展。docker在linux容器的基础上进行了进一步的封装&#xff0c;提…

Java--业务场景:获取请求的ip属地信息

文章目录 前言步骤在pom文件中引入下列依赖IpUtil工具类在Controller层编写接口&#xff0c;获取请求的IP属地测试接口 IpInfo类中的方法 前言 很多时候&#xff0c;项目里需要展示用户的IP属地信息&#xff0c;所以这篇文章就记录一下如何在Java Spring boot项目里获取请求的…

springboot集成jsp

首先pom中引入依赖包 <!--引入servlet--> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId> </dependency> <!--引入jstl标签库--> <dependency><groupId>javax.servle…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷③

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 模块一 …

springboot2.7集成sharding-jdbc4.1.1实现业务分表

1、引入maven <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version></dependency> 2、基本代码示例 基本逻辑&#xff1a;利用数…

软件测试|Django 入门:构建Python Web应用的全面指南

引言 Django 是一个强大的Python Web框架&#xff0c;它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能&#xff0c;帮助您从零开始构建一个简单的Web应用。 什么是Django&#xff1f; Django 是一个基于MVC&#xff08;模型-视图-控制器&a…

A preview error may have occurred. Switch to the Log tab to view details.

记录一下当时刚开始学习鸿蒙开发犯的错误 UIAbility内页面间的跳转内容的时候会遇到页面无法跳转的问题 并伴随标题错误 我们跳转页面需要进行注册 路由表路径&#xff1a; entry > src > main > resources > base > profile > main_pages.json 或者是页面…

鸿鹄电子招投标系统:企业战略布局下的采购寻源解决方案

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…

面试宝典进阶之Java线程面试题

T1、【初级】线程和进程有什么区别&#xff1f; &#xff08;1&#xff09;线程是CPU调度的最小单位&#xff0c;进程是计算分配资源的最小单位。 &#xff08;2&#xff09;一个进程至少要有一个线程。 &#xff08;3&#xff09;进程之间的内存是隔离的&#xff0c;而同一个…