返回首页 返回题库

最长连续段

C++ 简单 GESP四级真题 #排序#遍历

题目描述

题面描述

对于 个整数构成的数组 ,如果对 都有 ,那么称数组 是一个连续段。

给定由 个整数构成的数组 ,你可以任意重排数组 中元素顺序。请问在重排顺序之后, 所有是连续段的子数组中,最长的子数组长度是多少?

例如,对于数组 ,可以将其重排为 ,有以下 10 个子数组:

其中除 以外的子数组均是连续段,因此是连续段的子数组中,最长子数组长度为3。

输入格式

第一行,一个正整数 ,表示数组长度。

第二行, 个整数 ,表示数组中的整数。

输出格式

一行,一个整数,表示数组 重排顺序后,所有是连续段的子数组的最长长度。

样例1

输入:

4
1 0 2 4

输出:

3

样例2

输入:

9
9 9 8 2 4 4 3 5 3

输出:

4

数据范围

对于 40% 的测试点,保证 。

对于所有测试点,保证 ,。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
核心考察知识点:排序、数组遍历、去重统计。解题思路:由于可以任意重排数组,最长连续段等价于数组中最长的公差为1的递增无重复数字序列长度。首先对数组排序,之后遍历排序后的数组,跳过重复元素,统计连续递增1的最长长度即可。常见易错点:忽略重复元素的处理,导致统计长度错误;没有考虑负数的情况。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 12 浏览

讨论(0)