2012-01-18 5 views
0

私は1,2,199,100,8,100,199,1001,5,9のようなシリーズを持っており、偽コードを書いて上記のリストに1回以上出現する数字を見つけなければなりません。私は、199と100がリストに2度現れることをはっきりと確認することができます。それは答えになるはずですが、どのように擬似コードを書くべきですか? 私の論理はこのようなものである:(存在してリスト内に複数回出現する数字を見つけるための擬似コード

array x = {1,2,199,100,8,100,199,1001,5,9} 
    array y 
    array j 
for(int i = 0;i< 9; i++){ 
if x[i] exists in y 
    j[i] = y 
else 
    y[i] = x 


} 
+3

この宿題はありますか? –

+0

@TomasNarros私が試したことは質問にあります..もっとはるかに考えることができません。 – Maverick

答えて

1

クイックソートでリストをソートまたはマージソート(NログN):それはより多くのようにするべきではありません。前の数字が現在のものと等しい場合は、複製があります。

EDIT:

あなたが唯一のプリミティブ型を使用してではなく、 java.util.Collectionsを使用することができることに制限されている、あなたはこのようにそれを仕事ができると仮定すると、
Array array = {1,2,199,100,8,100,199,1001,5,9} 
Array sorted = sort(array) 
for (int i=1; i<sorted.length; i++) 
    int p = sorted[i-1] 
    int c = sorted[i] 
    if (p==c) print "duplicate" 
+0

あなたはそのための擬似コードのスニペットを書いていただけますか? – Maverick

0
// loop through list of numbers 
    // count apperences in list 
    // if appearences > 1 
      // remove all instances, add to results list 

// print the results list -- this will have all numbers that appear more than once. 
+0

2行目はどうですか?どのように外観を数える? – Maverick

+0

あなたが使用している言語は、そうする方法があります。そのようなものは、私は擬似コードで詳しく説明しません。 – circusdei

1

)それは、バブルソートと同じ性能を持っているのと同じように見え、これは確認してください。配列をソートして(より高速なソートで)、束を特定するために余分な1回のパスを実行すれば、おそらくもっと速くなります。 疑似コードが正しく理解されていれば、バグがあるようです。その後、以前のO(n)は、現在の数を比較リスト上の単一パスを行う

for(int i = 0;i< 9; i++){ 
if x[i] exists in y 
    j.push(x[i]); 
else 
    y.push(x[i]);  

} 
+0

はい、あなたは正しいです!それはそれでなければなりません。 – Maverick

0

For each value in `x` 
    Grab that value 
    If the list of duplicates does not contain that value 
    See if that value reoccurs at a later index in `x` 
     If it does, add it to the list of duplicates 

ここに翻訳された擬似コードですJava:

private void example() { 
    int [] x = new int [] {1,2,199,100,8,100,199,1001,5,9, 199}; 
    int [] duplicates = new int[x.length]; 

    for (int i = 0; i < x.length; i++) { 
     int key = x[i]; 
     if (!contains(duplicates, key)) { 
     // then check if this number is a duplicate 
     for (int j = i+1; j < x.length-1; j++) { 
      // start at index i+1 (no sense checking same index as i, or before i, since those are alreayd checked 
      // and stop at x.length-1 since we don't want an array out of bounds exception 
      if (x[j] == key) { 
      // then we have a duplicate, add to the list of duplicates 
      duplicates[i] = key; 
      } 
     } 
     } 
    } 

    for (int n = 0; n < duplicates.length; n++) { 
     if (duplicates[n] != 0) { 
     System.out.println(duplicates[n]); 
     } 
    } 
} 

    private boolean contains(int [] array, int key) { 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] == key) { 
     return true; 
     } 
    } 
    return false; 
    } 
関連する問題