我们定义一个完美序列为:这个序列的大于 k 的元素个数超过不大于 k 的元素 现在给你一个序列 a ,想让你找到它的连续子序列中完美序列的最长长度是多少? 连续子序列的意思是序列中一段连续的序列,比如,序列1 2 3 里面连续的子序列有1 2或者2 3 但是1 3不是连续子序列
对于每一组测试数据,第一行输入两个整数 n,k 代表这个序列的长度和要判断的元素 接下来输入 n 个整数, a[i] 代表系列中第 i 个元素 1≤ n ≤ 10^4,1≤ k,a[i] ≤ 10^5
对于每组测试数据,输出一个答案。
7 8 9 9 6 0 6 6 9
3
5 8 9 9 6 0 9
5
考点:前缀和
数据规模 n ≤ 1e4 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:前缀和
本题切入点
把「大于 k」记为 +1、「不大于 k」记为 −1,问题变成求最长的正和子段,用前缀和 + 记录每种前缀和最早出现位置来解。
预处理前缀和数组,把「区间求和」从 O(n) 降到 O(1)。
思路框架(前缀和 通法 · 非本题专属)
实现要点:开 long long,避免 n 较大时求和溢出。
复杂度:时间 预处理 O(n),每次查询 O(1) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1:输入 7 8 / 9 9 6 0 6 6 9 → 输出 3
满足要求的是 [9,9,6]
样例 2:输入 5 8 / 9 9 6 0 9 → 输出 5
满足要求的是 [9 9 6 0 9]
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:【2023】贝壳找房春招Java工程师笔试卷2;【2023】贝壳找房春招C++工程师笔试卷2;【2023】贝壳找房春招数据挖掘/机器学习工程师笔试卷2。