题目描述
学校准备举办编程训练营,共有 n 名学生参加。第 i 名学生的能力等级为 ai。老师需要把所有学生分成若干个训练小组,每名学生必须恰好属于一个小组,小组数量不限。
为了让每个小组中的学生能够逐级交流,一个训练小组必须同时满足以下条件:
- 组内学生的能力等级互不相同;
- 将组内学生的能力等级从小到大排列后,相邻两个等级的差都为 1。
例如,能力等级为 [1,2,3,4,5] 的小组符合要求;[1,2,3,5] 中的等级不连续,不符合要求;[0,1,1,2] 中有重复的等级,也不符合要求。
对于一种分组方案,将人数最少的小组的人数作为该方案的成绩。请合理分组,使这个成绩尽可能大,并输出最大值。
能力等级可能是负数。
输入格式
第一行包含一个正整数 n,表示参加训练营的学生数量。
第二行包含 n 个整数 a1,a2,…,an,表示每名学生的能力等级。
输出格式
输出一个整数,表示人数最少的小组人数能够达到的最大值。
7
4 5 2 3 -4 -3 -5
3
数据范围与提示
- 对于 100% 的数据,1≤n≤105,∣ai∣≤109。
部分测试数据还满足以下限制:
| 测试点编号 |
数据限制 |
| 1∼2 |
n≤6,1≤ai≤100 |
| 3∼4 |
n≤1000,1≤ai≤105 且 ai 互不相同 |
| 5∼6 |
n≤105,ai 互不相同 |
| 7∼8 |
n≤105,1≤ai≤105 |
| 9∼10 |
n≤105,−109≤ai≤109 |