#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
int T;
scanf("%d",&T);
for(int t=0;t<T;t++){
int n;
cin>>n;
int candy[n];
memset(candy,0,n);
for(int i=0;i<n;i++){
scanf("%d",&candy[i]);
}
if(n==1){
if(candy[0]==1)printf("YES\n");
else printf("NO\n");
}
else {
sort(candy,candy+n);
printf("%s",candy[n-1]<=candy[n-2]+1 ? "YES\n" : "NO\n");
}
}
return 0;
}
1.首先考虑只有一种糖果,这种情况是显然的
2.考虑糖果数量大于等于2的情形,首先对糖果排序(注意这里题目说吃的是最常见的糖果,也就是数量最多的糖果),这里只需要满足最多的糖果和次多的糖果数量相差不大于1.
2.1当相差大于1时,显然是不满足的
2.2当相差小于等于1时,就交替吃糖,当数量和第三大(或者没有)一样时三个糖交替吃......后面随着可以吃的种类越来越多,当然相邻可以吃到不同种类的糖
总结:所以只用特判1,与最大数量和次大数量糖果的差。