2012-01-23 1 views
0

に配列番号が1つしかない場合は、の配列を取得し、を返します。 これはどのように実行時間と空間の使用率が最も低いのですか?他に、マップに(1、X)を挿入し、xがマップにない場合は、[キーとして]:配列内の各xについて:in java - 配列に1回だけ表示される番号があるかどうかをチェックするメソッド?

はすべて

+2

この宿題はありますか?あなたはどの戦略を想像していますか? –

+0

あなたはもっと良い例を説明します...もし配列が{1,2,3,4,5}、{1,2,3,4,5,2} –

+2

なら、アルゴリズムがO(n)を実行するなら時間とO(1)空間の複雑さ、そしてO(1)の実行時間とO(n)空間の複雑さがあります。 –

答えて

1

は、配列を反復、HashMapを作成いただきありがとうございます。 map(x、map.value(x)+1)をマップに挿入します。


反復マップ、および1の値を持つキーがある場合に見つけて、そこにある場合はtrueを返し、そうでない場合はfalse

それはO(n)時間の複雑さとO(n)スペースの複雑さです。

擬似コード:

hasUnique(array): 
    map <- new hashMap 
    for each x in array: 
     if (map.get(x) == null): map.put(x,1) 
     else: map.put(x,map.get(x)+1) 
    for each key in map.keySet(): 
     if (map.get(key) == 1) return true 
    return false 

それは宿題のように思えるので、私は読者にexcersiceとして、それを実装しておきます。

+0

スペースの複雑さはどうですか?それはO(n)です。 –

+0

@aix:私は編集しました、私は最初に質問を誤解しました。ルチアン:それは確かにO(n)の空間の複雑さです。 – amit

1

私はおそらく配列をソートしようとします(qsortアルゴリズムはかなり高速です)。そして、配列を一度繰り返して、同じ左と右の要素を見つけません。

キーを要素にし、値 - 発生数をハッシュマップに入れることもできます。

//編集: と同様に、HashSetもオプションです。