n個の整数があり、それらがすべて異なることを確認するために簡単なロジックテストが必要です。すべての組み合わせを比較して一致を見つけたくありません...素敵でエレガントなアプローチに関するアイデアはありますか?
あなたのアイデアがどのプログラミング言語で書かれているかは気にしません。変換できます!
言語がサポートしている場合は、セット データ構造を使用します。また、表示された要素のハッシュ テーブルを保持することも検討できます。
pythonでは、試してみてください
seen={}
n_already_seen=n in seen
seen[n]=n
n_already_seen
n がすでに見られているかどうかを示すブール値になります。
可換性と推移性のおかげで、すべての組み合わせをチェックする必要はありません。リストを下に移動して、各エントリをその後に続く各エントリと照合するだけです。例えば:
bool areElementsUnique( int[] arr ) {
for( int i=0; i<arr.Length-1; i++ ) {
for( int j=i+1; j<arr.Length; j++ ) {
if( arr[i] == arr[j] ) return false;
}
}
return true;
}
内側のループは最初からではなく、次の要素(i+1
)から始まることに注意してください。
ハッシュ テーブルまたはハッシュを使用するセット型のデータ構造を使用できます。次に、すべての要素をハッシュテーブルまたはハッシュセットに挿入し、挿入時に、要素がテーブル/セットに既にあるかどうかを確認できます。何らかの理由で途中でチェックしたくない場合は、すべての数値を挿入してから、構造体のサイズが n 未満かどうかを確認できます。n 未満の場合は、繰り返し要素が必要です。そうでなければ、それらはすべてユニークでした。
これは、非常にコンパクトな Java ソリューションです。時間の複雑さは O(n) で償却され、空間の複雑さも O(n) です。
public boolean areAllElementsUnique(int [] list)
{
Set<Integer> set = new HashSet<Integer>();
for (int number: list)
if (set.contains(number))
return false;
else
set.add(number);
return true;
}