LeetCode: Search Insert Position
----- Условие ----- Найти индекс элемента target в отсортированном массиве nums. Если элемент отсутствует, то вернуть индекс, на котором он бы стоял, если бы был в массиве.
----- Решение ----- Используем бинарный поиск. Ставим указатели startInd на начало и endInd на конец списка, проверяем, больше ли средний элемент списка (по индексу middleInd), чем target: если больше, то endInd устанавливаем на middleInd, иначе startInd устанавливаем на middleInd. Eсли элемент по индексу middleInd равен target, то возвращаем middleInd. Цикл заканчивается, когда startInd становится больше, чем endInd.
Для случая, при котором элемент не был найден. Если target меньше элемента по индексу middleInd, то возвращаем middleInd, иначе middleInd + 1.
Сложность алгоритма по времени O(log n), сложность по памяти O(1).
----- Код ----- /** * @param {number[]} nums * @param {number} target * @return {number} */ const searchInsert = function(nums, target) { let startInd = 0; let endInd = nums.length - 1; let middleInd = 0;
while (startInd <= endInd) { middleInd = Math.trunc((startInd + endInd) / 2);
if (nums[middleInd] === target) return middleInd;
if (nums[middleInd] > target) { endInd = middleInd - 1; } else { startInd = middleInd + 1; } }
return nums[middleInd] > target ? middleInd : middleInd + 1; };