2011-05-29 17 views
1

は、2つのアレイ(擬似コード)を持って言う:ネストされたループ内の2つの配列を3つの条件で比較できますか?

arrayA = [ "a", "b", "c", "d" ]; 
arrayB = [ "b", "c", "d", "e" ]; 

はそれだけで使用してunique items to arrayA(arrayA.a)、common items(B、C、D)、およびunique items to arrayB(arrayB.e)を見つけることが可能ですネストされた形式の2つのループ?

我々は、最初の2つの目標を決定することができます

// Loop over arrayA 
for (itemA in arrayA) { 

    // Loop over arrayB 
    for (itemB in arrayB) { 

     // Assume that arrayA.itemA does not exist in arrayB by default 
     exists = false; 

     // Check for matching arrayA.itemA in arrayB 
     if (itemA == itemB) { 

      // If true set exists variable and break the loop 
      exists = true; 
      break; 
     } 
    } 

    // Tells us if an item is common 
    if (exists) { 
     // Do something 
    } 

    // The additional condition we need to determine (item is unique to array b) 
    else if() {} 

    // Tells us if the item is unique to arrayA 
    else { 
     // Do something else 
    } 
} 

質問:は、我々はさらに一歩進み、第三条件を決定することができます(アイテムがarrayBに固有のものですか)?トリックは、最初のループの反復で3番目の条件に対処できるようにすることです。

ループはどのような形式(do、for、for、for)でも組み合わせてもかまいません。

+0

ハッシュテーブルはこの問題を素早く処理します.Harckでは、arrayBのアイテムの「見える」ビットが1つでもトリックになります。配列アクセスと組み込み演算子以外のループでは、どのような操作が可能ですか?なし? –

+0

@キリアン、申し訳ありませんが、私は何かを省略しました。最初のループの反復で条件に対処できる必要があります。 – Mohamad

答えて

1

2番目の条件(項目は配列bに一意です)は、その時点でAの項目を反復処理しているため、常にfalseになります。ただし、ネストされた形式の2つのループと3つの配列を構築するためのあなたの最初の質問に答えるために、ここで私はどうなるのかです:

//Set up the arrays to hold the values 
uniqueA = itemA;//copy of item A 
uniqueB = itemB;//copy of item B 
common = []; 

//Iterate through the arrays to populate the values 
for (itemA in arrayA) { 
    for (itemB in arrayB) { 
     if(itemB == itemA){ 
      comon.add(itemA); 
      uniqueA.remove(itemA); 
      uniqueB.remove(itemB); 
      break; 
     } 
    } 
} 

あなたはitemAitemBをコピーすると、それらを反復していることを主張することができます。私がこれを見る唯一の方法は、最初の配列の値を保持することに気をつけず、値が一意である場合です。arrayAarrayBをそれぞれuniqueAuniqueBの代わりに使用できます。

2

ArrayBから共通要素が検出されたときに、共通要素を削除することでこれを達成できます。そうすれば、ArrayBはそのunqiue要素のみを含みます。

これにより、さらにチェックする際の効率が向上します。 ArrayAに重複した項目が含まれている場合、アルゴリズムを修正する必要があることに注意してください。

+0

申し訳ありませんが、私の更新された質問を参照してください!あなたは最初のループ反復の中で条件に応じることができる必要があります – Mohamad

+0

@モハマドあなたがしようとしていることには欠陥があるようです。 ArrayBのどの要素をArrayAのループでアクセスしようとしますか? ArrayBのどの要素が共通であるかを判別するためには、まずArrayAのすべての要素をチェックする必要があります。私はそれが可能ではないが、私の心を開いて、私が間違っていることを証明してくださいと言うだろう。 – Vinnyq12

+0

おそらく私はここで誤って「タグ」のパズルを乱用しました。私は実際にこれが可能かどうかはわかりません。これが私が尋ねた理由です。私はその質問に目を向けるでしょう。 – Mohamad

関連する問題