์ด์ง ํ์์ ์ ๋ ฌ๋ ๋งค์ฐ ํฐ ๋ฒ์ ๋ด์์ ์ต์ ์ ํด๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ์ ์ ๋ฆฌํ๋ค.
์ด์งํ์ ์๊ณ ๋ฆฌ์ฆ์ O(logN)์ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ค.
์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ์ด์งํ์
let arr = [1, 3, 5, 7, 9, 11, 13, 15, 17];
let target = 11;
function b_search_recur(arr, target, left, right) {
let mid = parseInt((left + right) / 2);
if (left > right) {
return -1;
}
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
return b_search_recur(arr, target, mid + 1, right);
} else {
return b_search_recur(arr, target, left, mid - 1);
}
}
console.log(b_search_recur(arr, target, 0, arr.length - 1)); //5(index๊ฐ)
๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ ์ด์งํ์
function b_search_loop(arr, target, left, right) {
while (left <= right) {
let mid = parseInt((left + right) / 2);
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ์์์ ๊ฐ์ ์๊ธฐ
function lowerBound(arr, target, left, right) {
while (left < right) {
let mid = parseInt((left + right) / 2);
if (arr[mid] >= target) right = mid;
else left = mid + 1;
}
return right;
}
function upperBound(arr, target, left, right) {
while (left < right) {
let mid = parseInt((left + right) / 2);
if (arr[mid] > target) right = mid;
else left = mid + 1;
}
return right;
}
function countByRange(arr, leftValue, rightValue) {
let rightIndex = upperBound(arr, rightValue, 0, arr.length);
let leftIndex = lowerBound(arr, leftValue, 0, arr.length);
return rightIndex - leftIndex;
}
let arr = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9];
console.log(countByRange(arr, 2, 4)); //7
'๐คฏ ๋ฐ์ดํฐ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ด, ์กฐํฉ ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ (0) | 2023.05.19 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ DFS(2) (0) | 2022.12.01 |
[์๊ณ ๋ฆฌ์ฆ] ์ธ์ ํ๋ ฌ์ ํตํ ์ธ์ ๋ฆฌ์คํธ ๊ตฌํ, DFS(1) (0) | 2022.11.26 |
[์๊ณ ๋ฆฌ์ฆ] ์ฝ์ ์ ๋ ฌ ๊ตฌํ (c์ธ์ด) (0) | 2022.11.12 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ ์ ๋ ฌ ๊ตฌํ (c์ธ์ด) (0) | 2022.11.10 |