小红正在分析用户的商品浏览序列。每条浏览记录都有一个商品类别编号。 她想统计有多少个连续浏览片段满足:片段中不同商品类别的数量不超过 k。 给定长度为 n 的浏览序列和参数 k,请输出满足条件的连续片段数量。
第一行:两个整数 n 和 k ,用空格分隔 n 表示浏览记录数量 (1 ≤ n ≤ 10⁵) k 表示允许的最大不同商品类别数 (1 ≤ k ≤ n) 第二行: n 个整数,表示浏览记录中的商品类别编号 nums[i](0 ≤ nums[i] ≤ 10⁹) , 用空格分隔 商品类别编号为唯一标识符,不同的整数代表不同的商品类别 例如: 1001 表示"手机", 2002 表示"电脑", 3003 表示"家电"
输出一个整数,不同商品类别数不超过 k 种的浏览片段数量。
5 2 1 40 1 12 5000
10
考点:双指针
数据规模 n ≤ 10 | 限制 2 秒 / 256MB | 标准输入输出
推荐方向:双指针
本题切入点
统计不同类别数 ≤k 的连续片段数:对每个右端点用双指针维护最远的合法左端点 l,则该右端点贡献 l 个片段,O(n) 可扛 1e5。
用两个指针协同移动,把两层循环的 O(n²) 优化到 O(n)。
思路框架(双指针 通法 · 非本题专属)
实现要点:写成 while (l < r) 循环最清晰,切记每轮至少有一个指针移动,否则死循环。
复杂度:时间 O(n)(排序则 O(n log n)) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1
5 2 / 1 40 1 12 500010解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-05月13号开发岗。