2016-07-14 13 views
0

いいえ、例:nsarray [3,1,5,3,3,5,0,1,1,3]がある場合: Missing numbersを計算するにはどうしたらいいですか?アレイ: -4 -3 -2 -1 2でも - なしソートは許可されず、アレイ内の数字は、ソート」が、連続した整数である場合、線形時間O(N)nsarrayの番号がありません

+4

これは宿題の質問のように聞こえます。 – Avi

+1

あなたは何を試してみることができますか? – Paulw11

答えて

0

で実行しなければなりません'配列と2つの連続する数字の違いを見つける。 1であれば、その数は見逃されません。そうでなければ、その数は見逃しています。

+0

並べ替えが許可されていません –

+0

次に、配列の最大値と最小値を見つけます。次に、中間値が存在するかどうかを調べます。これは、(配列[j] == i){(j = 0; j

2

よくブルートフォースの方法は、このようなものになります。

a。配列-5と3の最大値と最小値を見つけてください。3

b。 (-5、-4、-3、-2、-1、0 ... 3)

b1を検索する配列形式-5から3を複数回ループします。番号が見つかった場合はそのループを壊し、次の番号を続ける。

b2。ループはその数

のテイクノートを壊すことなく終了した場合それはちょうどそれをソートに比べて非効率的だが、それは直線的

+0

の複雑さを必要とする。 は//ここでこれはよさそうだ。この – LordSidious

1

にアイデアがboolsの別の配列を作るために、その数場合はtrueをチェックすることで実行されます存在する。あなたがそれをした後、ちょうどboolの配列を通過し、数が偽であれば、その行方不明です。

1

plzはこのコードを使用

NSArray *a = @[@3, @1, @-5, @3, @3, @-5, @0, @1, @1, @3]; 

    NSNumber *max=[a valueForKeyPath:@"@max.self"]; 
    NSNumber *min=[a valueForKeyPath:@"@min.self"]; 

    int big = [max intValue]; 
    int small = [min intValue]; 

    while (small<=big) { 

     if ([a containsObject:[NSNumber numberWithInt:small]]) { 

     } 
     else 
     { 
      NSLog(@"missing number is %d",small); 
     } 




     small++; 
    } 

result 

enter image description here

+0

よう } 何かが欠けているとしてマーク番号を見つけていない場合は、しかし、あなたはそれをより簡潔にすることができ//ここ } } を破る: '(int型NUM =分+ 1のために。あなたが 'min'と' max'があるかどうかを確認する必要がないので、num + max + num ++){...} '(' + 1'と '<' 'big' – Droppy

+0

ありがとう:) @Droppy –

+1

' containsObject'が一致を探している配列を繰り返すので、これはO(n^2)になります – Paulw11

関連する問題