2012-04-11 8 views
1

余分な配列を使わずにint配列から重複した値を削除する必要があります。配列から重複した値を削除した後に配列の長さをどのように変更できますか?余分な配列を使用せずにint配列から重複値を削除する最も良い方法はありますか?

例えば: -

INT []はARR =新しいINT [] {1,2,1,3,3,5,6,1,3,2,8} //配列の長さが11である

重複した値を取り除いた後の出力は{1,2,3,5,6,8}となります//配列の長さは6

どのようにできますか?

**事前定義されたメソッドを使用することはできません。適切なロジックでのみ実行する必要があります。

+3

なぜ 'arr = arr.Distinct()。ToArray()'を実行できないのですか? – Gleno

+0

この質問はインタビューで尋ねられました。 –

+0

これは、あらかじめ定義されたメソッドと追加の配列を使用します。 – Scroog1

答えて

3

基本的にはできません。配列は.NET内の固定サイズです。サイズを変更することはできません。

配列の "使用された"部分を示す別の変数を保持して、(例えば){1、2、3、5、6、8、0、0、0、 0、0}と6の "used length"を使用します。余分な配列を使用するのを避ける以外に、パフォーマンスに関心がある場合はどのような面が明確ではありません。たとえば、配列をソートして歩くことができます。連続する等しい要素を見つけるたびに、残りの部分を1つの値にシャッフルします。

0

Jonが述べたように、配列のサイズを変更することはできません。最善のアプローチは、ハッシュセットを使用することです。

ハッシュセットを使用できない場合は、それらを並べ替えます。しかしここでは結果を保持するための新しい配列を作成することになっています。

関連する問題