PTA 最少分成几组

PTA 最少分成几组

给定一个包含n个数的数列,由a1,a2,....,an组成,现在将这n个数分成若干组,使得每组中任意两个数|ai-aj|>1,(i!=j)。这个数列中的n个数最少可以分成几组呢?

输入格式:

第一行包含一个整数n(1≤n≤1000)。 第二行包含n个整数a1,a2,...,an(1≤ai≤10000,所有ai互不相同)。

输出格式:

输出仅一个整数,表示数列中n个数最少可以分成的组数。

输入样例1:

2
1 2

输出样例1:

2

输入样例2:

10
2 8 13 4 35 22 33 11 6 15

输出样例2:

1

思路

  • 刚开始是想找到最长的且差值为1的连续数字的长度即可。
  • 经过wxdl的提醒,其实答案只有0,1两个
  • 比如345,3和5丢一组,4再丢一组,而不是3,4,5各丢一组
  • 往大的说,所有数字我们都可以进行错开处理(也就是说题目一旦出现差值为一,我们即可立马输出2这个答案)
  • 注意:题目并不会出现相同的数字

代码

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[1001];
int main()
{
	int n;
	cin>>n;
	for(register int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	sort(a,a+n);
	for(register int i=1;i<n;i++)
	{
		if(a[i]-a[i-1]==1)
		{
			cout<<2;
			return 0;
		}
	}
	cout<<1;
	return 0;
}
原文地址:https://www.cnblogs.com/BeautifulWater/p/14512695.html