Leetcode刷题-不定长滑动窗口

分享丨【题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环) - 力扣(LeetCode)

3090

class Solution:def maximumLengthSubstring(self, s: str) -> int:c = Counter()res = 0rk = -1for i in range(len(s)):if i != 0:# 左指针向右移动一格,移除一个字符c[s[i - 1]] -= 1while rk + 1 < len(s) and c[s[rk + 1]] < 2 :# 不断地移动右指针c[s[rk + 1]] += 1rk += 1res = max(res, rk - i + 1)return res

1493

思路:使用一个变长的滑动窗口进行扫描,当窗口中元素的状态符合题目要求时,窗口继续扩大,答案即为最大的窗口值减去删去的元素的数目。

class Solution:def longestSubarray(self, nums: List[int]) -> int:d = 0 #删除的元素的数目left = 0 #窗口的左端res = 0 #窗口的右端#从最左端开始,将每个元素添加到窗口中for i in range(len(nums)):#如果该元素为0,则删除if nums[i] == 0:d += 1#移动左端点直到删除元素的数目小于2为止while left < len(nums) and d == 2:if nums[left] == 0:d -= 1left += 1#记录最大的窗口值res = max(res, i - left + 1 - d)#如果最大窗口值和数组长度相同,说明数组中没有0元素,又因必须删除一个元素,所以返回res-1if res == len(nums):return res - 1return res

1208

思路:使用变长滑动窗口,与1493差别不大。

class Solution:def equalSubstring(self, s: str, t: str, maxCost: int) -> int:changeCost = 0left = 0res = 0for i in range(len(s)):changeCost += math.fabs(ord(s[i]) - ord(t[i]))while changeCost > maxCost and left < len(s):changeCost -= math.fabs(ord(s[left]) - ord(t[left]))left += 1res = max(res, i - left + 1)return res

2730

思路:与1493、1208相似,变长滑动窗口的不同运用。

class Solution:def longestSemiRepetitiveSubstring(self, s: str) -> int:res = 0left = 0p = 0if len(s) == 1:return 1for i in range(1,len(s)):if s[i] == s[i - 1]:p += 1while p > 1 and left < len(s) - 1:if s[left] == s[left + 1]:p -= 1left += 1res = max(res, i - left + 1)return res

904

思路:使用一个哈希表存储每次摘的水果,当采摘的水果种类大于2时,窗口的左端点向右一直移动,知道采摘的水果种类不超过2为止,然后记录每次移动左端或者右端后窗口的值,最大值即为答案。

class Solution:def totalFruit(self, fruits: List[int]) -> int:s = Counter()left = 0res = 0for i in range(len(fruits)):s[fruits[i]] += 1while len(s) > 2:#去掉最左端这个水果s[fruits[left]] -= 1#如果这个种类的水果数量为0了,就从篮子里删掉这一个种类if s[fruits[left]] == 0:del s[fruits[left]]left += 1res = max(res, i - left + 1)return res

1695

class Solution:def maximumUniqueSubarray(self, nums: List[int]) -> int:res = 0now = 0left = 0c = Counter()for i in range(len(nums)):c[nums[i]] += 1now += nums[i]while c[nums[i]] > 1 and left < i:c[nums[left]] -= 1now -= nums[left]left += 1res = max(res, now)return res

2958

class Solution:def maxSubarrayLength(self, nums: List[int], k: int) -> int:res = 0left = 0c = Counter()for i in range(len(nums)):c[nums[i]] += 1while c[nums[i]] > k and left < i:c[nums[left]] -= 1left += 1res = max(res, i - left + 1)return res

2779

class Solution:def maximumBeauty(self, nums: List[int], k: int) -> int:nums.sort()res = 0left = 0for i in range(len(nums)):while nums[i] - nums[left] > 2*k:left += 1res = max(res, i - left + 1)return res

2024

class Solution:def maxConsecutiveAnswers(self, answerKey: str, k: int) -> int:c = Counter()left = 0res = 0for i in range(len(answerKey)):c[answerKey[i]] += 1while min(c["T"], c["F"]) > k:c[answerKey[left]] -= 1left += 1res = max(res, i - left + 1)return res 

1004

class Solution:def longestOnes(self, nums: List[int], k: int) -> int:res = 0left = 0z = 0for i in range(len(nums)):if nums[i] == 0:z += 1while z > k:if nums[left] == 0:z -= 1left += 1res = max(res, i - left + 1)return res

1658

class Solution:def minOperations(self, nums: List[int], x: int) -> int:left = 0res = -1s = sum(nums) - xfor i in range(len(nums)):s -= nums[i]while s < 0 and left <= i:s += nums[left]left += 1if s == 0:res = max(res, i - left + 1)if res >= 0:return len(nums) - reselse:return -1

1838

思路:使用变长滑动窗口,先对数组进行排序,每次加入元素时将所有在窗口内的元素递增到最大那个数(也就是当前加入的数),由于前面有i - left个元素已经递增到第 i 个数,所以此时需要递增(nums[i] - nums[i - 1]) * (i - left)次,当递增次数大于k时,持续移动左端点直到小于k为止。

class Solution:def maxFrequency(self, nums: List[int], k: int) -> int:if len(nums) == 1:return 1nums.sort()left = 0res = 0now = 0for i in range(1,len(nums)):now += (nums[i] - nums[i - 1]) * (i - left)while now > k:now -= (nums[i] -nums[left])left += 1res = max(res, i - left + 1)return res

2516

class Solution:def takeCharacters(self, s: str, k: int) -> int:c = Counter()n = len(s)for i in range(len(s)):c[s[i]] += 1print(c)if c['a'] < k or c['b'] < k or c['c'] < k:return -1res = 0left = -1for i in range(len(s)):c[s[i]] -= 1while c[s[i]] < k:left += 1c[s[left]] += 1res = max(res, i - left + 1)return n - res + 1

2831

class Solution:def longestEqualSubarray(self, nums: List[int], k: int) -> int:pos_lists = defaultdict(list)for i, x in enumerate(nums):pos_lists[x].append(i - len(pos_lists[x]))ans = 0for pos in pos_lists.values():if len(pos) <= ans:continue  # 无法让 ans 变得更大left = 0for right, p in enumerate(pos):while p - pos[left] > k:  # 要删除的数太多了left += 1ans = max(ans, right - left + 1)return ans

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

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

相关文章

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错&#xff0c;特别是深度思考模式&#xff0c;每次都能自我反省改进。比如我让 它写文案&#xff1a; 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们&#xff1a; 当CtrlS的肌肉记忆遇上抢票插件&#xff0c;当Spring Boot的…

SpringBoot源码解析(八):Bean工厂接口体系

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…

基于Django的个人博客系统的设计与实现

【Django】基于Django的个人博客系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言&#xff0c;结合Django框架构建后端逻辑&#xff0c;并运用J…

Vue-day2

7.Vue的生命周期 mounted函数&#xff1a;在页面加载完毕时&#xff0c;发送异步请求&#xff0c;加载数据&#xff0c;渲染页面 createApp({date(){},methods:{},mounted:function(){console.log(Vue挂载完毕&#xff0c;发送请求获取数据)} }).mount(#{app}) 8.ajax函数库…

SSM-MyBatis-总结

文章目录 一、Hello MyBatis1.1 流程1.2 总结 二、Crud 的一些注意点三、参数传递3.1 #{ } VS ${ }3.2 单、复参数传递&#xff08;1&#xff09;单参数&#xff08;2&#xff09;多参数 -- Param&#xff08;3&#xff09;总结 四、查询结果返回--结果封装4.1 ResultType 一般…

全面解析文件上传下载删除漏洞:风险与应对

在数字化转型的时代&#xff0c;文件上传、下载与删除功能已经成为各类应用程序的标准配置&#xff0c;从日常办公使用的协同平台&#xff0c;到云端存储服务&#xff0c;再到社交网络应用&#xff0c;这些功能在给用户带来便捷体验、显著提升工作效率的同时&#xff0c;也隐藏…

GSI快速收录服务:让你的网站内容“上架”谷歌

辛苦制作的内容无法被谷歌抓取和展示&#xff0c;导致访客无法找到你的网站&#xff0c;这是会让人丧失信心的事情。GSI快速收录服务就是为了解决这种问题而存在的。无论是新上线的页面&#xff0c;还是长期未被收录的内容&#xff0c;通过我们的技术支持&#xff0c;都能迅速被…

JavaScript

书写位置 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/*C…

Go的内存逃逸

Go的内存逃逸 内存逃逸是 Go 语言中一个重要的概念&#xff0c;指的是本应分配在栈上的变量被分配到了堆上。栈上的变量在函数结束后会自动回收&#xff0c;而堆上的变量需要通过垃圾回收&#xff08;GC&#xff09;来管理&#xff0c;因此内存逃逸会增加 GC 的压力&#xff0…

python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义 按位与运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;全1取1&#xff0c;其余取0。 按位或运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;有1取1&#xff0c;其余取0。 按位异或运算&#xff1a; 两个等长度二进制数上下对齐&#xff0c;相…

图论——最小生成树的扩展应用

最小生成树相关原理 acwing1146.新的开始 假设存在一个“超级发电站” 在每一个矿井修发电站相当于从这个“超级发电站”到各个矿井连一条长度为 v [ i ] v[i] v[i]的边。 这样一来这就是一个最短路的模板题。 #include <iostream> #include <cstring> using na…

供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇

综述 我们之前在供应链系统设计-中台系统设计系列&#xff08;五&#xff09;- 供应链中台实践概述文章中针对中台到底是什么进行了描述&#xff0c;对于中台的范围也进行划分&#xff0c;如下图所示&#xff1a; 关于商品中心&#xff0c;我们之前用4篇文章介绍了什么是商品中…

Git图形化工具【lazygit】

简要介绍一下偶然发现的Git图形化工具——「lazygit」 概述 Lazygit 是一个用 Go 语言编写的 Git 命令行界面&#xff08;TUI&#xff09;工具&#xff0c;它让 Git 操作变得更加直观和高效。 Github地址&#xff1a;https://github.com/jesseduffield/lazygit 主要特点 主要…

为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1

为大模型提供webui界面的利器&#xff1a;Open WebUI Open WebUI的官网&#xff1a;&#x1f3e1; Home | Open WebUI 开源代码&#xff1a;WeTab 新标签页 Open WebUI是一个可扩展、功能丰富、用户友好的自托管AI平台&#xff0c;旨在完全离线运行。它支持各种LLM运行程序&am…

全程Kali linux---CTFshow misc入门(14-24)

第十四题&#xff1a; dd命令&#xff1a;dd是一个用于复制和转换数据的命令&#xff0c;它可以对文件、设备等进行操作&#xff0c;在数据备份、转换格式等场景经常使用。 ifmisc14.jpg&#xff1a;if表示 “input file”&#xff08;输入文件&#xff09;&#xff0c;这里指…

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。

一、前言 我从24年11月份开始学习网络爬虫应用开发&#xff0c;经过2个来月的努力&#xff0c;于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志&#xff08;网络爬虫学习&#xff1a;应用selenium从搜…

C语言连接Mysql

目录 C语言连接Mysql下载 mysql 开发库 方法介绍mysql_init()mysql_real_connect()mysql_query()mysql_store_result()mysql_num_fields()mysql_fetch_fields()mysql_fetch_row()mysql_free_result()mysql_close() 完整代码 C语言连接Mysql 下载 mysql 开发库 方法一&#xf…

前端-Rollup

Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许你自由…

Ubuntu20.04 磁盘空间扩展教程

Ubuntu20.04 磁盘空间扩展教程_ubuntu20 gpart扩容-CSDN博客文章浏览阅读2w次&#xff0c;点赞38次&#xff0c;收藏119次。执行命令查看系统容量相关的数据&#xff1a;df -h当前容量为20G&#xff0c;已用18G&#xff08;96%&#xff09;&#xff0c;可用844M&#xff0c;可用…

使用Ollama本地部署DeepSeek R1

前言 DeepSeek是一款开源的智能搜索引擎&#xff0c;能够通过深度学习技术提高搜索的智能化水平。如果你正在寻找一种方式来将DeepSeek部署在本地环境中&#xff0c;Ollama是一个非常方便的工具&#xff0c;它允许你在本地快速部署并管理各种基于AI的模型。 在本篇博客中&…