2011-01-18 8 views
0

配列(またはリスト)のすべての数値が等しいことを確認する最良の方法は何ですか?すべての数値が等しいことを確認する

私は、最初の不等要素istを求めるループは、おそらく効率的ですが、それほどエレガントでないか、または読み込み可能ではないと思います。 1行にすべてのソリューション?

+0

のいくつかの並べ替え? –

+2

これ以上エレガントではありません。 –

+0

たとえば、C#で(たぶんlinqとして)。 –

答えて

3

この問題のすべてのソリューションは、Ω(n)の時間で実行され、Ω(n)の比較を行う必要があります言ったので、十分大きい配列の場合は、すべての要素を調べて同じ値を持つかどうかをチェックすることはできません。

アレイのリニアスキャンを実行して、最初のものと異なる値を探している場合は、おそらくこの問題を解決する最善の方法です。これは、下限と漸近的に一致する合計(n-1)の比較を行い、エレガントで簡単に実装できます。

0

正しい言語では1行ではありませんが、私はそれを1つにすることができると確信しています。

EDIT:あなたはこれがない場合ので、C#は...

return list.Length > 0 && list[0] == list.Aggregate(list[0], (current, i) => current & i); 
+0

'int combined = 0xFF;'は良い考えではありませんが、 'int combined = list [0]'は細かいものでなければなりません。 – Elalfer

+0

高速で難読化されています。 – Eiko

+0

はい、本当に良いですが読みにくいです。 –

2

はどのような言語でCの擬似コード

i = len(list) - 1; 
while (list[i] == list[i+1] && i) i--; 
return i == 0; 
関連する問題