時には我々は、(互いに素セットなど)特定のデータ構造を維持するために、配列の添字を使用する必要があるが、データが大きすぎると、我々は、このような大規模な配列を開くことができない、この時間は、私たちは、離散的なデータでなければなりません。
例えば、データ{}我々缶67542347 <75331434 <87433476 <開か99844531 99844531,75331434,87433476,67542347相対的大小関係と新たな配列番号、新しいアレイにおける数のバイナリ検索が。B [1] = 67542347、B [2] = 75331434、B [3] = 87433476、B [4] = 99844531。我々は99844531このデータを検索したい場合は、あなたがBでそれを見つけることができたときには、図4に示すように、データにそれを表現するために使用することができ、4番。
この検索方法によれば、我々は重元素、要素を繰り返し、すなわち除去を行ってみたいです。
:どの我々は2種類の機能を使用する必要があり
UNIQUE機能:常に繰り返しエレメントをエレメント(隣接する繰り返しエレメント)を繰り返すの前の位置を占めていないだろう、最後の要素の次の要素のアドレスがシーケンスを繰り返さない返します。
LOWER_BOUND:終了位置(左右開閉)バイナリ検索パラメータの最初の要素が等しいまたは着信より大きい場合に開始位置からアレイは、要素のアドレスが配列要素の開始位置を減算することにより得られる戻り添字。
私は端が返されます見つけることができませんでした。
コードを接続します。
1つの#include <iostreamの> 2の#include <アルゴリズム> 3。 使用した 名前空間STD; 4 INT N-; 5 INT A []; // 必要な離散的なデータ 。6 int型 B []; // ストア離散 。7 int型の主(){ 8。 ための(int型 I = 1 ; I <= N; ++ I){ 9 CIN >> A [I]、B [I]は= [I]; 10 } 11 ソート(Bの+ 1、B用+ 1。 N- +); // 独自機能「除去」は、要素の繰り返し隣接しているので、データを並べ替える 12 int型 M = UNIQUE(B + 1、B + N-+ 1。 -B-)を1。 ; // 隣接繰り返し要素を削除、重複要素長さm返し 13がなく INT X = LOWER_BOUND(B + 1、B +のm + 1、[する。1 ]) - B; // データをお探しているものとする[1]、xはアレイ内の[1]の位置、すなわち、下付き文字Bであり、 14 リターン 0 ; 15 }