JavaScript | LeetCode
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
نمایش بیشتر8 498
مشترکین
-624 ساعت
-277 روز
-9730 روز
آرشیو پست ها
Хотите внедрить ИИ, но не знаете с чего начать?
ГигаАкадемия запустила ИИ-менторинг — индивидуальную сессию с практикующим экспертом для собственников и бенефициаров.
Никакой теории. Только вы, эксперт и ваша задача.
Три часа фокуса на вашем запросе.
Ментор разбирает процессы, данные и ограничения и помогает определить, где ИИ быстрее всего даст бизнес-эффект и повлияет на рост выручки.
Вы уходите не с вдохновением, а с планом:
— карта вашего ИИ-кейса: задача, эффект, риски
— 3 приоритетных сценария — где ценность выше, а запуск проще
— дорожная карта пилота на 2–6 недель
Цель ментора — усилить вашу экспертизу: научить самостоятельно находить, оценивать и запускать ИИ-решения.
ИИ уже готов работать на вас. А вы готовы взять его в партнёры?
Оставьте заявку на сайте и получите консультацию.
Узнать больше
Номер реестровой записи: С502024004938.
#реклама 16+
sberuniversity.ru
О рекламодателе
🔴 Тестовое собеседование на Frontend-разработчика со старшим разработчиком ex. Сбер
13 августа(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика.
Как это будет:
📂 Даниил Дмитриев, старший разработчик в R-Vision, ex. Сбер, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Даниил будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Даниилу
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot
Реклама.
О рекламодателе.
Получи грант до 1,35 млн руб. на обучение в магистратуре
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
— 4 офлайн программы по востребованным направлениям ИТ
— 2 онлайн-программы: машинное обучение и продуктовый менеджмент
— 550 грантов до 75%
— Вечерние занятия и учеба по выходным — удобно совмещать с работой
— Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
— Возможность стажировок и трудоустройства в ведущих компаниях
— Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас!
Зарегистрироваться
#реклама 16+
cu.ru
О рекламодателе
Бесплатный доступ к Kaspersky Premium
Оформите 30 дней бесплатного доступа к Kaspersky Premium и получите защиту своих устройств от онлайн-угроз уже сейчас!
Узнать больше
#реклама 16+
kaspersky.ru
О рекламодателе
Задача: 668. Kth Smallest Number in Multiplication Table
Сложность: hard
Почти каждый использовал таблицу умножения. Таблица умножения размером m x n - это целочисленная матрица mat, где mat[i][j] == i * j (индексация начинается с 1).
Даны три целых числа m, n и k. Верните k-й наименьший элемент в таблице умножения размером m x n.
Пример:
Input: m = 3, n = 3, k = 5 Output: 3 Explanation: The 5th smallest number is 3.👨💻 Алгоритм: 1⃣Установка границ поиска: Установите нижнюю границу left равной 1 и верхнюю границу right равной m * n. 2⃣Бинарный поиск: Используйте бинарный поиск, чтобы найти k-й наименьший элемент. Для каждого среднего значения mid, посчитайте количество элементов в таблице умножения, которые меньше или равны mid. 3⃣Проверка количества элементов: Если количество элементов меньше k, увеличьте нижнюю границу (left). Если количество элементов больше или равно k, уменьшите верхнюю границу (right). 😎 Решение:
var findKthNumber = function(m, n, k) {
let left = 1, right = m * n;
while (left < right) {
let mid = Math.floor((left + right) / 2);
if (countLessEqual(m, n, mid) < k) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
};
function countLessEqual(m, n, x) {
let count = 0;
for (let i = 1; i <= m; i++) {
count += Math.min(Math.floor(x / i), n);
}
return count;
}
Ставь 👍 и забирай 📚 Базу знанийУслуги дата-центра в Москве
Размещение и аренда серверного оборудования в дата-центре.
👍 4 современных дата-центра в Москве.
👍 Лицензированный оператор связи.
👍 Индивидуальные конфигурации выделенных серверов под задачи клиента.
👍 Круглосуточная техническая поддержка в Телеграм, без ботов.
Узнать цену
#реклама 16+
itsoft.ru
О рекламодателе
Задача: 334. Increasing Triplet Subsequence
Сложность: medium
Дан массив целых чисел nums. Верните true, если существуют такие три индекса (i, j, k), что i < j < k и nums[i] < nums[j] < nums[k]. Если таких индексов не существует, верните false.
Пример:
Input: nums = [2,1,5,0,4,6] Output: true Explanation: The triplet (3, 4, 5) is valid because nums[3] == 0 < nums[4] == 4 < nums[5] == 6.👨💻 Алгоритм: 1⃣Инициализация переменных: Создайте две переменные first_num и second_num и установите их значение на максимальное целое значение (Integer.MAX_VALUE или аналогичный максимум для выбранного языка программирования). Эти переменные будут хранить минимальные значения, необходимые для проверки существования возрастающей тройки. 2⃣Итерация по массиву: Пройдите по каждому элементу массива nums. Для каждого элемента выполните следующие проверки: - если текущий элемент меньше или равен first_num, обновите first_num текущим элементом. - иначе, если текущий элемент меньше или равен second_num, обновите second_num текущим элементом. - иначе, если текущий элемент больше second_num, это означает, что найдена возрастающая тройка, поэтому верните true. 3⃣Возврат результата: Если после завершения итерации по массиву не была найдена возрастающая тройка, верните false. 😎 Решение:
var increasingTriplet = function(nums) {
let firstNum = Infinity;
let secondNum = Infinity;
for (let n of nums) {
if (n <= firstNum) {
firstNum = n;
} else if (n <= secondNum) {
secondNum = n;
} else {
return true;
}
}
return false;
};
Ставь 👍 и забирай 📚 Базу знанийБонусы, которые нужны вашему бизнесу
Приятно, когда есть выгода. А тут её много.
Сбер собрал спецпредложения от партнёров на одной площадке: месяц бухгалтерии за 1 ₽, год доступа к 1С, доступ к размещению рекламы на 2 месяца и многое другое для развития вашего бизнеса.
Берите столько бонусов, сколько нужно. Клиентам СберБизнеса они уже доступны, остальным достаточно открыть расчётный счёт. Заходите и выбирайте!
Узнать больше
Финансовые услуги оказывает: ПАО Сбербанк.
#реклама
sberbank.ru
О рекламодателе
Задача: 1268. Search Suggestions System
Сложность: medium
Вам дан массив строк products и строка searchWord. Разработайте систему, которая предлагает не более трех названий продуктов после ввода каждого символа searchWord. Предлагаемые товары должны иметь общий префикс с searchWord. Если есть более трех продуктов с общим префиксом, возвращаются три лексикографически минимальных продукта. Возвращается список списков предложенных продуктов после ввода каждого символа searchWord.
Пример:
Input: products = ["havana"], searchWord = "havana" Output: [["havana"],["havana"],["havana"],["havana"],["havana"],["havana"]]👨💻 Алгоритм: 1⃣Отсортируйте массив продуктов. 2⃣Итерируйтесь по каждому символу в searchWord, находите все продукты, которые соответствуют текущему префиксу. 3⃣Сохраняйте не более трех лексикографически минимальных продуктов для каждого префикса. 😎 Решение:
var suggestedProducts = function(products, searchWord) {
products.sort();
let result = [];
let prefix = "";
for (let char of searchWord) {
prefix += char;
let suggestions = products.filter(product => product.startsWith(prefix)).slice(0, 3);
result.push(suggestions);
}
return result;
};
Ставь 👍 и забирай 📚 Базу знанийЗадача: 57. Insert Interval
Сложность: medium
Вам дан массив непересекающихся интервалов
intervals, где intervals[i] = [starti, endi] представляет начало и конец i-го интервала, и массив intervals отсортирован в порядке возрастания по starti. Вам также дан интервал newInterval = [start, end], представляющий начало и конец другого интервала.
Вставьте newInterval в массив intervals так, чтобы intervals оставался отсортированным в порядке возрастания по starti и в intervals не было бы перекрывающихся интервалов (при необходимости объедините перекрывающиеся интервалы).
Верните массив intervals после вставки.
Обратите внимание, что не обязательно модифицировать массив intervals на месте. Вы можете создать новый массив и вернуть его.
Пример:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5] Output: [[1,5],[6,9]]👨💻 Алгоритм: 1️⃣ Инициализация переменных: Инициализируются переменные n и i для хранения размера массива интервалов и текущего индекса соответственно, а также пустой массив res для хранения результата. 2️⃣Обработка случаев без перекрытия и с перекрытием: В случае отсутствия перекрытия до вставки, проходим через массив интервалов до тех пор, пока конечная точка текущего интервала меньше начальной точки нового интервала. Добавляем текущий интервал в массив res и переходим к следующему. В случае перекрытия, продолжаем обход, пока начальная точка нового интервала меньше или равна конечной точке текущего интервала. Обновляем начальные и конечные точки нового интервала, объединяя перекрывающиеся интервалы в один. 3️⃣Обработка интервалов после вставки: Проходим через оставшиеся интервалы после индекса i и добавляем их в массив res. Это включает интервалы, которые следуют после нового интервала и не перекрываются с ним. Возвращаем массив res, содержащий все интервалы с корректно вставленным новым интервалом. 😎 Решение:
var insert = function (intervals, newInterval) {
let n = intervals.length,
i = 0,
res = [];
while (i < n && intervals[i][1] < newInterval[0]) {
res.push(intervals[i]);
i++;
}
while (i < n && newInterval[1] >= intervals[i][0]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
res.push(newInterval);
while (i < n) {
res.push(intervals[i]);
i++;
}
return res;
};
Ставь 👍 и забирай 📚 Базу знанийАренда VPS/VDS-сервера.
Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес.
Преимущества аренды:
- Выделенные ресурсы без переплаты;
- KVM-виртуализация;
- Быстрые NVMe SSD;
- Соответствие 152-ФЗ, PCI DSS;
- Бесплатная защита от DDoS;
- Управление через панель, API и Terraform;
- Техподдержка 24/7.
Запустите сервер за несколько минут!
Попробовать
#реклама 16+
selectel.ru
О рекламодателе
Задача: 40. Combination Sum II
Сложность: medium
Дан массив целых чисел
candidates и целевое число target. Нужно найти все уникальные комбинации, где числа из candidates в сумме дают target.
Каждое число можно использовать только один раз в комбинации.
Результаты не должны содержать повторяющихся комбинаций.
Пример:
Input: candidates = [10,1,2,7,6,1,5], target = 8 Output: [[1,1,6],[1,2,5],[1,7],[2,6]]👨💻 Алгоритм: 1⃣ Отсортировать массив
candidates для возможности пропуска дубликатов.
2⃣. Запустить рекурсивную функцию backtrack(start, trackSum):
- Если trackSum == target — сохранить копию текущей комбинации
- Если trackSum > target — прекратить ветку
- На каждом шаге пропускать повторяющиеся элементы (если i > start && nums[i] == nums[i - 1])
- Не переиспользовать текущий элемент — следующий вызов с i + 1
3⃣ Использовать track для текущей комбинации и trackSum для суммы
😎 Решение:
var combinationSum2 = function(candidates, target) {
const res = [];
const track = [];
let trackSum = 0;
const backtrack = (nums, start) => {
if (trackSum === target) {
res.push([...track]);
return;
}
if (trackSum > target) return;
for (let i = start; i < nums.length; i++) {
if (i > start && nums[i] === nums[i - 1]) continue;
track.push(nums[i]);
trackSum += nums[i];
backtrack(nums, i + 1);
track.pop();
trackSum -= nums[i];
}
}
candidates.sort((a, b) => a - b);
backtrack(candidates, 0);
return res;
};
Ставь 👍 и забирай 📚 Базу знаний🔴 Тестовое собеседование с ТимЛидом Frontend-разработки в этот четверг
6 августа(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика.
Как это будет:
📂 Алексей Романов, Teamlead в Underhood.dev с опытом 6+ лет, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Алексей будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Алексею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot
Реклама.
О рекламодателе.
Kafka на практике: продюсеры, консьюмеры, Docker
Хотите увидеть, как реально работает Kafka?
3 августа в 20:00 — вебинар с живыми примерами кода. Поднимем кластер в Docker, создадим топики, напишем продюсеров на Python/Java, настроим консьюмеров с consumer groups. Разберем партиционирование, оффсеты и гарантии доставки.
Для backend-разработчиков, DevOps и всех, кто любит практику.
Узнать больше
#реклама 16+
otus.ru
О рекламодателе
Задача: 1151. Minimum Swaps to Group All 1's Together
Сложность: medium
Дан бинарный массив data, необходимо вернуть минимальное количество перестановок, чтобы сгруппировать все 1, присутствующие в массиве, вместе в любом месте массива.
Пример:
Input: data = [1,0,1,0,1]
Output: 1
Explanation: There are 3 ways to group all 1's together:
[1,1,1,0,0] using 1 swap.
[0,1,1,1,0] using 2 swaps.
[0,0,1,1,1] using 1 swap.
The minimum is 1.
👨💻 Алгоритм:
1⃣Используем два указателя, left и right, чтобы поддерживать скользящее окно длиной ones и проверяем каждый фрагмент массива data, подсчитывая количество единиц в нем (cnt_one) и запоминая максимальное значение max_one.
2⃣Пока окно скользит по массиву data, поддерживаем его длину равной ones.
3⃣Обновляем количество единиц в окне, добавляя новую границу data[right] и вычитая левую границу data[left].
😎 Решение:
var minSwaps = function(data) {
const ones = data.reduce((a, b) => a + b, 0);
let cnt_one = 0, max_one = 0;
let left = 0, right = 0;
while (right < data.length) {
cnt_one += data[right++];
if (right - left > ones) {
cnt_one -= data[left++];
}
max_one = Math.max(max_one, cnt_one);
}
return ones - max_one;
};
Ставь 👍 и забирай 📚 Базу знанийЗадача: 172. Factorial Trailing Zeroes
Сложность: medium
Дано целое число n, верните количество конечных нулей в n!.
Обратите внимание, что n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1.
Пример:
Input: n = 3 Output: 0 Explanation: 3! = 6, no trailing zero.👨💻 Алгоритм: 1️⃣Вычислите факториал n: Инициализируйте переменную nFactorial значением 1. Для каждого i от 2 до n включительно умножайте nFactorial на i. 2️⃣Подсчитайте количество конечных нулей в nFactorial: Инициализируйте переменную zeroCount значением 0. Пока nFactorial делится на 10 без остатка, делите его на 10 и увеличивайте zeroCount на 1. 3️⃣Верните значение zeroCount как количество конечных нулей в n!. 😎 Решение:
var trailingZeroes = function (n) {
let nFactorial = BigInt(1);
for (let i = 2; i <= n; i++) {
nFactorial *= BigInt(i);
}
let zeroCount = 0;
const ten = BigInt(10);
while (nFactorial % ten === BigInt(0)) {
nFactorial /= ten;
zeroCount++;
}
return zeroCount;
};
Ставь 👍 и забирай 📚 Базу знанийПолучи грант до 1,35 млн руб. на обучение в магистратуре
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
— 4 офлайн программы по востребованным направлениям ИТ
— 2 онлайн-программы: машинное обучение и продуктовый менеджмент
— 550 грантов до 75%
— Вечерние занятия и учеба по выходным — удобно совмещать с работой
— Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
— Возможность стажировок и трудоустройства в ведущих компаниях
— Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас!
Зарегистрироваться
#реклама 16+
cu.ru
О рекламодателе
Задача: 789. Escape The Ghosts
Сложность: medium
Вы играете в упрощенную игру PAC-MAN на бесконечной 2D-сетке. Вы начинаете в точке [0, 0], и у вас есть конечная точка target = [xtarget, ytarget], к которой вы пытаетесь добраться. На карте находятся несколько привидений, их начальные позиции заданы в виде двумерного массива ghosts, где ghosts[i] = [xi, yi] представляет начальную позицию i-го привидения. Все входные данные являются целочисленными координатами.
Каждый ход вы и все привидения можете независимо выбирать перемещение на 1 единицу в любом из четырех основных направлений: север, восток, юг или запад, или оставаться на месте. Все действия происходят одновременно.
Вы сможете сбежать, если и только если сможете достичь цели раньше, чем любое привидение достигнет вас. Если вы достигнете любой клетки (включая конечную точку) одновременно с привидением, это не считается побегом.
Верните true, если можно сбежать независимо от того, как движутся привидения, иначе верните false.
Пример:
Input: ghosts = [[1,0],[0,3]], target = [0,1] Output: true Explanation: You can reach the destination (0, 1) after 1 turn, while the ghosts located at (1, 0) and (0, 3) cannot catch up with you.👨💻 Алгоритм: 1⃣Проверьте, что наше таксическое расстояние до цели меньше, чем расстояние от любого привидения до цели. 2⃣Если это так, мы можем гарантированно добраться до цели раньше любого привидения. 3⃣Если привидение может добраться до цели раньше нас или одновременно с нами, побег невозможен. 😎 Решение:
class Solution {
escapeGhosts(ghosts, target) {
const taxi = (P, Q) => Math.abs(P[0] - Q[0]) + Math.abs(P[1] - Q[1]);
const playerDistance = taxi([0, 0], target);
return ghosts.every(ghost => taxi(ghost, target) > playerDistance);
}
}
Ставь 👍 и забирай 📚 Базу знанийЗадача: 1208. Get Equal Substrings Within Budget
Сложность: medium
Вам даны две строки s и t одинаковой длины и целое число maxCost.
Вы хотите преобразовать s в t. Изменение i-го символа строки s на i-й символ строки t стоит |s[i] - t[i]| (т.е. абсолютная разница между значениями ASCII символов).
Верните максимальную длину подстроки s, которую можно изменить, чтобы она соответствовала соответствующей подстроке t с затратами, не превышающими maxCost. Если нет подстроки из s, которую можно изменить на соответствующую подстроку из t, верните 0.
Пример:
Input: s = "abcd", t = "bcdf", maxCost = 3 Output: 3 Explanation: "abc" of s can change to "bcd". That costs 3, so the maximum length is 3.👨💻 Алгоритм: 1⃣Инициализация переменных: maxLen для хранения максимальной длины подстроки с затратами, не превышающими maxCost. start для хранения начального индекса текущей подстроки. currCost для хранения текущих затрат на преобразование подстроки s в t. 2⃣Итерация по индексам от 0 до N-1: Добавить текущие затраты на преобразование символа s[i] в t[i] к currCost. Удалять элементы с левого конца, уменьшая затраты до тех пор, пока currCost не станет меньше или равным maxCost. Обновить maxLen длиной текущей подстроки. 3⃣Возврат maxLen как результата. 😎 Решение:
var equalSubstring = function(s, t, maxCost) {
const N = s.length;
let maxLen = 0;
let start = 0;
let currCost = 0;
for (let i = 0; i < N; i++) {
currCost += Math.abs(s.charCodeAt(i) - t.charCodeAt(i));
while (currCost > maxCost) {
currCost -= Math.abs(s.charCodeAt(start) - t.charCodeAt(start));
start++;
}
maxLen = Math.max(maxLen, i - start + 1);
}
return maxLen;
};
Ставь 👍 и забирай 📚 Базу знанийЗадача: 650. 2 Keys Keyboard
Сложность: medium
На экране блокнота есть только один символ 'A'. Для каждого шага можно выполнить одну из двух операций над этим блокнотом: Copy All: скопировать все символы, присутствующие на экране (частичное копирование не допускается). Paste: Вы можете вставить символы, которые были скопированы в прошлый раз. Учитывая целое число n, верните минимальное количество операций, чтобы символ 'A' появился на экране ровно n раз.
Пример:
Input: n = 3 Output: 3👨💻 Алгоритм: 1⃣Используйте динамическое программирование для отслеживания минимального количества операций, необходимых для достижения определенного количества 'A' на экране. 2⃣Итерируйтесь от 1 до n, проверяя все возможные делители текущего числа и обновляя минимальное количество операций для каждого числа. 3⃣Возвращайте значение из таблицы динамического программирования для n. 😎 Решение:
var minSteps = function(n) {
if (n === 1) return 0;
const dp = new Array(n + 1).fill(0);
for (let i = 2; i <= n; i++) {
dp[i] = i;
for (let j = 1; j <= i / 2; j++) {
if (i % j === 0) {
dp[i] = Math.min(dp[i], dp[j] + i / j);
}
}
}
return dp[n];
};
Ставь 👍 и забирай 📚 Базу знаний