k番目の最も一般的な要素を配列から探したいが、最も一般的な要素を見つけることができたが、k番目の共通要素を見つける方法はわからない。あなたは彼らの出現によって要素を並べ替えると、k番目の要素を取ることができcで指定された整数配列からk番目の共通要素を取得する
private static int KthCommonElement(int[] a, int k)
{
var counts = new Dictionary<int, int>();
foreach (int number in a)
{
int count;
counts.TryGetValue(number, out count);
count++;
//Automatically replaces the entry if it exists;
//no need to use 'Contains'
counts[number] = count;
}
int mostCommonNumber = 0, occurrences = 0;
foreach (var pair in counts)
{
if (pair.Value > occurrences)
{
occurrences = pair.Value;
mostCommonNumber = pair.Key;
}
}
Console.WriteLine("The most common number is {0} and it appears {1} times", mostCommonNumber, occurrences);
return mostCommonNumber;
}
これはどれくらい効率的でなければなりませんか?それは完全な並べ替えよりも効率的である必要がありますか? –