アルゴリズムの理解(4)
1114 ワード
バイナリサーチ繰返し処理
以前に確認したバイナリ検索アルゴリズムでは、検索した値が配列内の複数の要素と同じ値である場合、その要素のすべてのインデックスを取得できません.したがって、重複値を検索するには別のアルゴリズムが必要です.
まず、データ内の最初の値が値以上の場所を検索します.
値より大きい場所が初めて見つかった場合は、重複する値のすべてのインデックスを出力できます.
もしそうであれば、JAVAを使用して最初の値より大きい場所を検索できます.
LowerBoundメソッドの実装
static int lowerBound(int[] arr, int value){
int l = 0;
int r = arr.length; // value 가 배열에 있는 어떠한 값보다 클 경우, 배열의 마지막 인덱스를 넘기지 않기 위함.
int mid;
while (l < r){
mid = (l + r)/2;
if(value <= arr[mid])
r = mid;
else
l = mid+1;
}
return l;
}
次に、JAVAの特定の値より大きい最初の場所を検索します.upperBoundメソッドを実装しましょう
static int upperBound(int arr[], int value) {
int l = 0;
int r = arr.length;
int mid;
while (l < r) {
mid = (l + r) / 2;
if (value >= arr[mid]) {
l = mid + 1;
} else {
r = mid;
}
}
return l;
}
Reference
この問題について(アルゴリズムの理解(4)), 我々は、より多くの情報をここで見つけました https://velog.io/@jaden_94/알고리즘-알고가자4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol