配列のユニークな値を数えるのに問題があります。配列要素を並べ替えることなくこれを行う必要があります。配列要素を並べ替えることなく、配列内の一意の数をどのように数えることができますか?
どうすればこの問題を解決できますか?
配列のユニークな値を数えるのに問題があります。配列要素を並べ替えることなくこれを行う必要があります。配列要素を並べ替えることなく、配列内の一意の数をどのように数えることができますか?
どうすればこの問題を解決できますか?
は、.NET 3.5を使用している場合、あなたは簡単に介して、LINQでこれを達成することができます
int numberOfElements = myArray.Distinct().Count();
非LINQ:
List<int> uniqueValues = new List<int>();
for(int i = 0; i < myArray.Length; ++i)
{
if(!uniqueValues.Contains(myArray[i]))
uniqueValues.Add(myArray[i]);
}
int numberOfElements = uniqueValues.Count;
これは宿題に関する質問であれば、答えは彼に多くの点を与える可能性はありませんが、linqの点ではまだ良い答えです。 – andleer
@Andrew非LINQの宿題を追加しました。 –
非linqの例は本当に悪いですが、実際に宿題に関する質問であれば、Rich Bにはもっと良い解決策があります。 :) (ヒント:各アイテムの配列全体をどのように反復する必要はありませんか?) – Arafangion
これは、はるかに効率的な非LINQの実装です。
var array = new int[] { 1, 2, 3, 3, 3, 4 };
// .Net 3.0 - use Dictionary<int, bool>
// .Net 1.1 - use Hashtable
var set = new HashSet<int>();
foreach (var item in array) {
if (!set.Contains(item)) set.Add(item);
}
Console.WriteLine("There are {0} distinct values. ", set.Count);
なぜ
パフォーマンスは賢明です。両方とも同一であるべきで、HashSetを使用してこのデモコードが醜く見えるようにしてください。 –
辞書には、リストに含まれるものよりもはるかに高速でなければなりません。 –
個別の値のみをカウントするか、配列の各数値をカウントする必要がありますか?(例:「5回は3回」)
第2の要件は、カウントソートアルゴリズムの開始ステップで実行できます。
それはこのようなものになるだろう:インデックス/キー要素が
よろしく
O(n)の実行時間MAX_VALUEメモリ使用
彼はちょっとP ... – jarus
宿題には何も間違っていません...答えはそのままではありません。 (つまり、答えを取って*良い*にする)。 – Arafangion