import std.stdio;
import std.conv, std.array, std.algorithm, std.string;
import std.math, std.random, std.range, std.datetime;
import std.bigint;
import std.container;
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }

void main(){
	int n = read.to!int;
	int[] as;
	foreach(i; 0 .. n) as ~= read.to!int;
	
	bool[int] aset;
	foreach(a; as) aset[a] = 1;
	
	if(aset.keys.length > 2){
		debug writeln("A");
		writeln("No");
		return;
		}
	
	if(aset.keys.length == 2){
		int m;
		if(aset.keys[0] + 1 == aset.keys[1]) m = aset.keys[0];
		else if(aset.keys[1] + 1 == aset.keys[0]) m = aset.keys[1];
		else{
			debug writeln("B");
			writeln("No");
			return;
			}
		
		int k = 0;
		foreach(a; as) if(a == m) k += 1;
		
		if(m < k){
			debug writeln("C-1");
			writeln("No");
			return;
			}
		
		if(k + (n - k) / 2 < m + 1){
			debug writeln("C-2");
			writeln("No");
			return;
			}
		
		debug writeln("D");
		writeln("Yes");
		return;
		
		}
	
	else{
		int m = aset.keys[0];
		if(m == n - 1){
			debug writeln("E");
			writeln("Yes");
			return;
			}
		if(n >= m * 2){
			debug writeln("F");
			writeln("Yes");
			return;
			}
		
		debug writeln("G");
		writeln("No");
		return;
		}
	
	}



/*

差は最大で1である。
（たとえば9と10しか存在しないなど）

9と言うのは他の誰ともちがうぼうしをかぶっている人
10と言うのは他の誰かと同じぼうしをかぶっている人

9と言った人の人数+(10と言った人の人数 / 2)に注目。
それが10以上ならOK。

差が0つまり全員同じ数を言った場合は2つのパターンがある。
全員他の人と違う帽子をかぶっているパターン。
これは人数-1を言っているならOK。
全員誰かと同じ帽子をかぶっているパターン。
これは人数がその言った数の2倍以上ならOK。



*/