Remove Element - LeetCode
----- Условие ----- В массиве nums требуется удалить все элементы, равные val, на месте. А также вернуть длину результирующего массива.
----- Решение ----- Создаем offest - переменную, указывающую на смещение положения элементов (по сути, счетчик вхождения val). Проходимся в цикле по массиву. Если элемент с индексом i равен val, то инкрементируем offset, иначе перемещаем элемент на позицию i - offset.
Далее обрезаем массив до length - offset на месте с помощью splice.
Сложность алгоритма по времени O(n), где n - длина массива, сложность по памяти O(1).
----- Код ----- /** * @param {number[]} nums * @param {number} val * @return {number} */ const removeElement = function(nums, val) { let offset = 0; for (let i = 0; i < nums.length; i++) { if (nums[i] === val) { offset++; } else { nums[i - offset] = nums[i]; } }
nums.splice(nums.length - offset);
return nums.length; };
· 11.05
Всегда хотел узнать, какой смысл объявлять функции через const? Это предотвращает всплытие, но зачем? Особенно в задаче, которая вся состоит из одной функции.
А если следовать рекомендациям из "Чистого кода", то объявление функции следует искать ниже вызывающего кода, а сверху писать основной код.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 11.05
На LeetCode заготовки для функции объявляются через var, я меняю на const, чтобы новый синтаксис был, но не меняю способ объявления
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён