AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3210. 优雅子数组

困难通过率 53% · 提交 83 · 通过 44
滑动窗口双指针哈希表不定滑窗

小慕正在处理一个数组问题。如果一个数组中,出现次数最多的那个元素出现的次数大于等于K,就称这个数组为 ,其中K称为优雅阈值。 例如,数组[1, 2, 3, 1, 2, 3, 1]是一个3-优雅数组,因为元素1出现了3次,大于等于3。 数组[1, 2, 3, 1, 2]就不是一个3-优雅数组,因为是1和2,都只出现了2次。 小慕现在有一个数组A和一个整数k,他想知道A中有多少个是k-优雅子数组。 子数组是指由数组中一个或多个连续元素组成的数组。 例如,数组[1,2,3,4]包含10个子数组,分别是: [1], [1,2], [1,2,3], [1,2,3,4], [2], [2,3], [2,3,4], [3], [3,4], [4]。

提示:带虚线的词点一下有通俗解释。

输入描述

第一行输入两个数字,以空格隔开,含义是:A数组长度 k值 第二行输入A数组元素,以空格隔开

输出描述

输出A有多少子数组是k-优雅子数组

示例

示例 1

输入

7 3
1 2 3 1 2 3 1

输出

1

示例 2

输入

7 2
1 2 3 1 2 3 1

输出

10

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
k-优雅子数组 图解 (k=3) 1 2 3 1 2 3 1 0 1 2 3 4 5 6 整个数组:元素1出现3次,≥3,所以是3-优雅数组 子数组 [0..6] 是3-优雅 子数组 [0..3] 中1出现2次,不是3-优雅 滑动窗口解法思路: 用两个指针 left 和 right 维护窗口,统计窗口内每个元素的出现次数。 当窗口内某个元素出现次数 ≥ k 时,以 left 开头的所有子数组都满足条件, 然后移动 left 缩小窗口,继续统计。
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「优雅子数组」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。