索引の値
7833 ワード
問題の説明
配列と数値を渡すsearch関数は、その数値に対応するインデックスの値を返します.渡された数値に対応するインデックスに値が存在しない場合は、-1を返します.伝達の配列は整然としている.
入力例は以下の通りです
search([1, 2, 3, 4, 5, 6], 4) // 3
search([1, 2, 3, 4, 5, 6], 6) // 5
search([1, 2, 3, 4, 5, 6], 11) // -1
この問題は一般に配列に対して1回のループの全体的な回転を行い,配列は最初から最後まで回転し,対応する数字を探す方式は時間的複雑度O(n)を有する.つまり、配列全体をブラウズして、両方の1つを見つけたり見つけたりしません.
これに対する簡単な解決方法は以下の通りである.
function search(arr, val) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === val) {
return i;
}
}
return -1;
};
環を持ち,O(n)の時間的複雑さを持つ.これを古祖魯線形探索と呼ぶ.私たちが今回見なければならないのは少し違います.バイナリ検索を用いて問題を解くことは,分割と征服アルゴリズムを用いた方法である.
ソースコードは次のとおりです.
function search(array, val) {
let min = 0;
let max = array.length - 1;
while (min <= max) {
// 배열의 중간값을 취한다.
let middle = Math.floor((min + max) / 2);
let currentElement = array[middle];
// middle을 val과 비교하며 최신화한다.
// 효율적인 탐색을 위해 값이 존재하지 않을 부분은 바로 무시하는 방식을 취한다.
if (array[middle] < val) {
min = middel + 1;
}
else if (array[middle] > val) {
max = middle - 1;
}
else {
// middle의 값이 val과 같다면 리턴한다.
return middle;
}
}
// val에 해당하는 값이 없다면 -1을 리턴한다.
return -1;
};
以上のように,分割征服アルゴリズムを用いることで時間を節約できる.以上のソースコードの時間的複雑度はLognである.Reference
この問題について(索引の値), 我々は、より多くの情報をここで見つけました https://velog.io/@alsghk9701/그-인덱스에-있는-값テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol