Сложность: medium
Дан отсортированный массив целых чисел
nums и число target. Нужно найти индексы первого и последнего вхождения
target в массив. Если
target не найден — вернуть [-1, -1]. Пример:
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]
👨💻 Алгоритм:
1️⃣ Используем два бинарных поиска:
- Один для нахождения первого вхождения
- Второй — для нахождения последнего
2️⃣ В первом поиске продолжаем идти влево (
right = mid - 1), даже если nums[mid] == target Во втором — вправо (
left = mid + 1), чтобы найти крайнее вхождение 3️⃣ Если
target не найден — возвращаем [-1, -1]😎 Решение:
var searchRange = function(nums, target) {
const findFirst = () => {
let left = 0, right = nums.length - 1, idx = -1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
idx = mid;
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return idx;
};
const findLast = () => {
let left = 0, right = nums.length - 1, idx = -1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
idx = mid;
left = mid + 1;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return idx;
};
return [findFirst(), findLast()];
};Ставь 👍 и забирай 📚 Базу знаний
