ブレークの最小数を見つけるために、二つの顔を破っバイト

タイトル:アレイ、例えば、不連続の最小数を見つける与えられる:[9,1,2,3,5,7,8]最小のブレーク番号3

思考の最も簡単な種類は:配列をソートします、一つの要素出張後の要素と比較して発注した後、左端の開始前にないものを見つけるために、あなたがソートに必要な、それに関連したソートアルゴリズムの時間複雑さ、

第アイデア:配列の最大長を確立する、アレイ内の最大の要素を見つけ、その後、新しい配列に元の配列と素子群の値を通過し、要素位置の添え字に置きます値は、元の配列の要素の最小値を見つけ、そこから新たなトラバース配列添字、リクエストに応じて以前の位置で0の値の位置は、このようにして、その後、時間複雑度はO(N)である場合、しかし、スペースの複雑さは、最大値に関連付けられた、保証することはできません

第三のアイデア:私たちは実際には、新しい配列、我々が使用していない最小角度標準の以前の場所で、その後、新しい配列のすべての要素が前方に移動することができ、第二の考えから知っている、各要素値は、ある程度、空間的複雑度を低減するように、要素に対する要素の最小値を差し引いたが、要素値の添え字を入れない;擬似コードを次のように

INT []結果=新しいINT [最大 - 最小+ 1]。

{(I ++; I <Array.lengthとiは0 = INT)のために

  結果[配列[I] -min] =配列[i]は、

}

 

{(I ++; I <result.length iが0 = INT)のために

  IF(結果[I] == 0){

    結果を返す[I-1];

  }

}

上記のプログラムはまた、配列は0が含まれている場合、問題、解決策があるだろうと判断され、問題を残しました。

INT []結果=新しいINT [最大 - 最小+ 1]。

{(I ++; I <Array.lengthとiは0 = INT)のために

  結果[配列[I] -min] =配列[I] -min;値も格納されているマイナス最小---------

}

 

以下のために(; I <result.length、整数iが1 = I ++){最小値に対応する第一の記憶された位置は間違い0であるため、-------- iが、1から始まります

  IF(結果[I] == 0){

    リターン結果[I-1] +分。

  }

}

 

別の解決策がある:0が決定されていないと判定された場合、結果が1でない場合は、使用前に数を減算数は、前者が数であります

 

おすすめ

転載: www.cnblogs.com/zhaolei1996/p/12275250.html