🗒️2831. 找出最长等值子数组
2024-11-29
| 2024-11-29
0  |  阅读时长 0 分钟
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]一定不是满足目标值。

📎 参考

  • 【题单】滑动窗口与双指针
  • Important
  • 209. 长度最小的子数组2516. 每种字符至少取 K 个
    Loading...
    目录