leecode2958 最多K个重复元素的最长子数组

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

在这里插入图片描述

这个题目比较简单,很明显的滑动窗口求子数组数量的问题

对于滑动窗口的方法,我的理解是

  1. 根据题目条件判断,确定用什么数据结构

    1. 如果是数字大小的比较,例如找子数组大于某个数,则不需要用数据结构,比如说 0209 长度最小的子数组 以及 2730 找到最长的半重复子字符串
    2. 如果需要重复用到子数组中的元素进行判断,那么用集合,比如说 0003 无重复元素的最长子串以及0713 乘积小于k的子数组
    3. 如果判断某个元素个数,那么需要用map来进行一一对应 ,比如本题,以及0076 最小覆盖子串以及2958 最多K个重复元素的最长子数组(可以用可以不用)
  2. 之后定义左右两个指针,右指针是用来遍历的指针,左指针是当右指针发现不满足条件之后,对窗口大小进行修改的指针。

    1. 本题的指针修改就是当右指针遍历的时候发现,集合中有超过k个的元素,那么就要修正左指针大小
  3. 代码如下所示

public int maxSubarrayLength(int[] nums, int k) {
    Map<Integer,Integer> map = new HashMap<>();
    int len = nums.length;
    int left = 0;
    int max = 0;
    for(int right = 0; right<len;right++ ){
        //将其添加进入集合中
        map.put(nums[right],map.getOrDefault(nums[right],0)+1);
        while (map.get(nums[right])>k){
            //这个元素多了
            map.put(nums[left],map.get(nums[left])-1);
            left++;
        }
        //此时这个map集合中没有比这个k大的数组
        max = Math.max(max,right-left+1);
    }
    return max;
}

灵神的思路

和我几乎一样,不过灵神用的是map集合的merge函数来写的,我是用getOrDefault来写的,这个merge我使用的不熟练

freq.merge(c, 1, (oldValue, newValue) -> oldValue + newValue);

  1. 其中第一个参数c,是键,第二个1,是指默认属性,如果这个键没有属性那么就将这个键对应的值赋值为这个第二个参数
  2. 第三个参数oldValue和这个newValue,OldValue是指这个原本的值,这个newValue是指第二个参数。
  3. 我们可以用方法引用来实现
    Integer::sum,表示两个数相加
PotPlayer自用皮肤 自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。 立即下载

相关推荐

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

[HOT 100] 2958. 最多K个重复元素的最长子数组

在数组中的 频率 指的是它在数组中的出现次数。子数组 指的是一个数组中一段连续非空的元素序列。如果一个数组中所有元素的频率都 小于等于。,那么我们称这个数组是 好 数组。(双指针)技巧来实现。中 最长好 子数组的长度。

人生需要动态规划 学习需要贪心算法 377

在Ubuntu22.04.2远程服务器上搭建OHIF+Orthanc

在Ubuntu远程服务器上不翻墙,但是本地windows需要科学上网开始之前,首先在终端输入export -p查看是否有代理端口如下如果有就关了,输入如下命令。

weixin_51116549的博客 1333

LeetCode 分类刷题:2958. 最多 K 个重复元素的最长子数组

题目要求找出数组中满足所有元素出现次数都不超过k的最长连续子数组。使用滑动窗口算法,维护一个记录元素频率的哈希表。当窗口右端元素频率超过k时,移动左指针缩小窗口,确保始终满足条件。时间复杂度O(n),空间复杂度O(n)。

flashlight_hi的博客 427

从“跳变”到“连续”:深入理解霍尔传感器插值与PLL角度估算的优劣与选择

本文深入解析霍尔传感器角度估算技术,对比线性插值法和锁相环(PLL)跟踪法的优劣,为电机控制领域的工程师提供实用指南。通过STM32F407和CubeMX的实例,详细探讨两种方法的实现细节、性能对比及优化策略,帮助在不同应用场景下做出最优选择。

weixin_30855761的博客 557

单细胞测序数据整合

基于Seurat 联合harmony进行单细胞数据整合分析

G2530051386的博客 9791

Leetcode 2958.最多k个重复元素的最长子数组,滑动窗口题解和总结

本文探讨了如何求解整数数组中最长"好数组"子数组的长度问题。首先明确了子数组的连续特性,指出滑动窗口法是解决此类问题的有效方法。通过维护左右指针和哈希表来统计窗口内元素出现次数,当某元素出现超过k次时收缩左边界,同时记录最大合法窗口长度。文章提供了C++实现代码,强调了边界检查和操作顺序等细节问题,并给出了力扣题目链接供参考。该解法时间复杂度为O(n),空间复杂度为O(n),能高效解决问题。

qq_50760984的博客 190

centos 添加新硬盘,对根目录扩容

本地安装了虚拟机,系统为centos7,使用过程中,渐渐地发现磁盘容量不够用了,于是在虚拟机中新增了一块硬盘。 进入系统内查看: sdb是新增的硬盘,大小为40g。 接下来有两种方式,一种是普通方式直接挂载。https://blog.youkuaiyun.com/qq_39314099/article/details/106200322 这样的话只有在挂载点的目录下操作才能使用到这个新硬盘,不是很理想。 还有一种方式lvm,逻辑卷管理的方式。 LVM简单介绍: 它是 Linux 下对磁盘分区进行管

qq_39314099的博客 1万+

滑动窗口刷题笔记:最多 K 个重复元素的最长子数组,找到最长的半重复子字符串,最小覆盖子串

ps:笔记和代码按本人理解整理,重思路

学习记录 1200

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 546

别再为STM32F407的USB高速通信发愁了!手把手教你用USB3320(ULPI接口)搞定硬件设计

本文详细介绍了STM32F407通过USB3320(ULPI接口)实现高速USB通信的硬件设计实战。从USB3320的选型优势到原理图设计避坑,再到PCB布局和固件配置,提供了一套完整的解决方案。特别针对USB PHY芯片的常见问题,如供电处理、信号完整性和初始化代码,给出了专业建议和调试技巧,帮助工程师高效完成高速USB通信设计。

weixin_42527401的博客 387

Day59 | 灵神 | 滑动窗口:最多K个重复元素的最长子数组&&找到最长的半重复子字符串

我们先往右移动1个字符,这样就可以比较l和l-1所指的字符,如果不相等,那说明我们没有找到第一对相等的相邻字符,我们就继续往后移动,只有l和l-1相等的时候,我们才达到了左指针停止移动的条件,就是左右指针之间已经没有1对以上的相邻相等字符了。那我们就自然而然想到拿一个变量来记录相邻字符相等的数量,如果大于1,说明满足了条件,我们应该向后移动左指针,直到左指针满足条件了为止,而怎么判断左指针满足条件该停止移动了又是新的难点。还是和前面的思路相同,固定遍历右端点,然后根据具体条件收缩左指针。

m0_74795952的博客 388

ASPICE标准快速掌握「总目录」

欢迎大家来到雪云飞星的《ASPICE标准快速掌握》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习ASPICE协议知识点的参考。本专栏可以帮助大家快速掌握如何在项目中使用ASPICE,ASPICE的学习通常仅需要半天时间左右,掌握方法后完全就可以结合快查表来指导具体项目的质量提升了。

雪云飞星的博客 3010

LeeCode题库第2958题

给你一个整数数组nums和一个整数k。一个元素x在数组中的指的是它在数组中的出现次数。如果一个数组中所有元素的频率都k,那么我们称这个数组是数组。请你返回nums中子数组的长度。指的是一个数组中一段连续非空的元素序列。6最长好子数组是 [1,2,3,1,2,3] ,值 1 ,2 和 3 在子数组中的频率都没有超过 k = 2。[2,3,1,2,3,1] 和 [3,1,2,3,1,2] 也是好子数组。最长好子数组的长度为 6。2。

2301_80195716的博客 759

使用FSL对DTI数据进行预处理

在fsl官网我们可以看到是同时使用了AP和PA图像处理,采用的是最小二乘法将2个图像合并为1个图像。–inindex此处需要处理的是PA图像,在acq_param.txt中我们是把这个放在第一行的,此处为1,如果处理的是AP图像,则此处为2。为了校正磁场引起的畸变,对DTI的B0像分别采集了A>P和P>A的反向编码的两种B0像。即如果AP和PA只有1个B0像时,那么这里就是两行,如果各有3个B0像则这里应该是6行。假设转换后的图像为sub01_AP.nii.gz和sub01_PA.nii.gz。

weixin_52073820的博客 4839

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【算法】删除子数组的最大得分 & 最多 K 个重复元素的最长子数组——不定长滑动窗口与哈希频率约束

LeetCode 1695(删除子数组的最大得分)要求找出元素互不相同的子数组,使元素和最大;2958(最多 K 个重复元素的最长子数组)将其泛化为每个元素的出现次数不超过 k,求最长子数组长度。 两道题本质都是不定长滑动窗口 + HashMap 维护窗口内元素频率的模板题——右指针扩展入窗,左指针在频率超限时收缩,O(n) 时间得出答案。本文从暴力枚举出发,逐步推导到滑窗模板,附完整 Java 代码和示例测试。

超级苦力怕的博客 502

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode 2958. 最多 K 个重复元素的最长子数组【不定长滑窗】1535

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 199

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

每日算法-250327

记录今天学习和解决的三道 LeetCode 算法题。

2403_83543687的博客 852

每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min

3.逆向思维转换后k=totalSum-x,要判断k为负的特殊情况。2.逆向思维转换:求和为totalSum-x的最长窗口大小。2.我的思想,F和T分开来求,两个最大值再取最大值。2.题意转换:窗口内不含相同元素,哈希表维护即可。1.如果一个数组中所有元素的频率都。每一次操作时,你应当移除数组。2.题意转换:所有元素的频率都。结果的题数,请你返回在不超过。最左边或最右边的元素,然后从。2.题目理解:0的数量不超过k。,请你从中删除一个含有。1.给你一个正整数数组。1.给你一个整数数组。

2301_80044595的博客 530

滑动窗口——Golang实现

for循环遍历right,然后累加/统计nums[right],在通过内层for循环左移left,直到满足条件为止,统计结果即可。本题,固定/枚举右端点,然后逐渐右移左端点,看看最少能移动到那个位置,循环结束,只需要统计left左侧位置的元素个数+1即可。中,统计子数组个数,这种问题,必须要注意,需要固定一个端点,求遍历过的元素中,满足条件的子数组个数。否则容易漏算、超算。中,right遍历nums,使用map存储元素频率,再使用for循环左移left,保证结果满足条件,统计结果即可。

m0_45978228的博客 609

Leetcode-滑动窗口

想象一只毛毛虫趴在数组上 for循环遍历右边界的过程就是毛毛虫头向前运动 运动过程中窗口保持满足条件while(条件) 不满足条件就收尾 身体蜷缩 然后重复运动。这里的if判断写的是先判断是否开启维护窗口机制 如果是就先left++ 保证下面while循环不会数组越界。然后加入while开始寻找刚刚最早加入的一对重复字符 cnt--(踢出最早加入的字符对)寻找是否有更长的字符串。重申了滑动窗口的终点是维护窗口内的条件不能墨守成规。最后老实了 不得不使用HashMap来存储。

2303_80864208的博客 209

灵茶山03,11题

209. 长度最小的子数组 - 力扣(LeetCode)3. 无重复字符的最长子串 - 力扣(LeetCode)713. 乘积小于 K 的子数组 - 力扣(LeetCode)2958. 最多 K 个重复元素的最长子数组 - 力扣(LeetCode)2730. 找到最长的半重复子字符串 - 力扣(LeetCode)2779. 数组的最大美丽值 - 力扣(LeetCode)1004. 最大连续1的个数 III - 力扣(LeetCode)2962. 统计最大元素出现至少 K 次的子数组 - 力扣(LeetCod

2302_80742310的博客 172

力扣刷题D2滑动窗口

思路:先让右指针不断向右扩展(扩大窗口),找到大于target的位置,再使用左指针向左缩小窗口,找到等于或者小于target的值。思路:采用了滑动窗口的思想,通过两个指针 left 和 right 来维护一个半重复子串,并通过计数器 cp 来确保最多只有一对相邻字符相同。思路:右指针不断向右遍历,如果遍历到已经出现过的元素,左指针向前剔除已经出现过的元素。//想使用双指针的话,可以把题目转化一下,找出凑x元素外的连续数组。例如示例 1,当右端点移到第二个 3 时,左端点移到 2,此时 [1,

m0_67403773的博客 679

【入门算法】不定长滑动窗口:从动态调整到精准匹配以灵活特性实现高效破题

滑动窗口基于暴力解法的优化,将时间复杂度降到线性,解题时的关键是定义好循环不变量。掌握好滑动窗口,可以进一步提升你的算法能力和解题效率。本文深入探讨了不定长滑动窗口算法,通过多个LeetCode题目实例,详细解析了如何利用滑动窗口解决不同类型的问题。

2401_87944878的博客 3401

【2025-02-12】 基础算法:滑动窗口

滑动窗口是:通过动态调整窗口的左右边界来避免重复计算,从而降低时间复杂度。其核心思想是维护一个窗口,通过移动右边界扩展窗口、移动左边界收缩窗口,找到满足条件的解。

tan_run的博客 1062

灵茶山艾府【题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环) 做题笔记

注意的是 从第一个满足窗口条件的位置开始记录,出的是下一轮记录时候淘汰的。先全部复制答案数组为-1,使用 Arrays.fill(ans,-1)从第一个满足条件的窗口开始 是 先出 再入 再更新的顺序。然后采用 入 更新记录 出。

qq_50532732的博客 639
上一篇: leecode3 无重复元素的最长子串
下一篇: leecode2962 统计最大元素出现至少K次的子数组
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值