type
status
date
slug
summary
tags
category
icon
password
创建时间
Nov 29, 2024 05:08 AM
给你一个下标从 0 开始的整数数组
nums
和一个整数 k
。如果子数组中所有元素都相等,则认为子数组是一个 等值子数组 。注意,空数组是 等值子数组 。
从
nums
中删除最多 k
个元素后,返回可能的最长等值子数组的长度。子数组 是数组中一个连续且可能为空的元素序列。
我的想法是统计窗口中所有数字出现的次数和对应数字出现的次数。当窗口向前移动时,会增加右窗口字符出现的次数,而右窗口对应数字出现的次数就是这个窗口中等值子数组长度。
如何移动左边界呢?我们的删除元素个数是最多 k 个元素。因此,只要我们保证窗口内的其他元素(不是右端点的元素)不超过 k 即可。
nums[l]=nums[r]
,且此时count - mymap[nums[l]] > k
,说明nums[l]
不是区间中较多的元素,左边界右移;
nums[l]!=nums[r]
,且此时count - mymap[nums[l]] > k
,说明nums[l]
一定不是满足目标值。
📎 参考
- 无