JavaScript | LeetCode
Відкрити в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Показати більше8 707
Підписники
-724 години
-287 днів
-9530 день
Триває завантаження даних...
Схожі канали
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
червень '26
червень '26
+44
в 1 каналах
травень '26
+32
в 0 каналах
Get PRO
квітень '26
+47
в 0 каналах
Get PRO
березень '26
+26
в 0 каналах
Get PRO
лютий '26
+38
в 0 каналах
Get PRO
січень '26
+48
в 0 каналах
Get PRO
грудень '25
+39
в 1 каналах
Get PRO
листопад '25
+161
в 0 каналах
Get PRO
жовтень '25
+173
в 0 каналах
Get PRO
вересень '25
+129
в 0 каналах
Get PRO
серпень '25
+165
в 0 каналах
Get PRO
липень '25
+175
в 1 каналах
Get PRO
червень '25
+173
в 2 каналах
Get PRO
травень '25
+204
в 2 каналах
Get PRO
квітень '25
+356
в 0 каналах
Get PRO
березень '25
+320
в 5 каналах
Get PRO
лютий '25
+439
в 5 каналах
Get PRO
січень '25
+534
в 53 каналах
Get PRO
грудень '24
+232
в 0 каналах
Get PRO
листопад '24
+292
в 0 каналах
Get PRO
жовтень '24
+681
в 17 каналах
Get PRO
вересень '24
+2 356
в 332 каналах
Get PRO
серпень '24
+464
в 0 каналах
Get PRO
липень '24
+2 250
в 219 каналах
Get PRO
червень '24
+3 130
в 234 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 29 червня | +1 | |||
| 28 червня | 0 | |||
| 27 червня | +2 | |||
| 26 червня | +1 | |||
| 25 червня | +3 | |||
| 24 червня | +2 | |||
| 23 червня | 0 | |||
| 22 червня | +3 | |||
| 21 червня | +1 | |||
| 20 червня | +3 | |||
| 19 червня | +2 | |||
| 18 червня | +1 | |||
| 17 червня | 0 | |||
| 16 червня | +2 | |||
| 15 червня | +1 | |||
| 14 червня | +1 | |||
| 13 червня | 0 | |||
| 12 червня | 0 | |||
| 11 червня | +2 | |||
| 10 червня | 0 | |||
| 09 червня | +1 | |||
| 08 червня | +2 | |||
| 07 червня | +2 | |||
| 06 червня | +1 | |||
| 05 червня | 0 | |||
| 04 червня | +2 | |||
| 03 червня | +3 | |||
| 02 червня | +7 | |||
| 01 червня | +1 |
Дописи каналу
Стажировка в Альфа-Банке — для студентов и выпускников
Начните карьеру с оплачиваемой стажировки в Альфа-Банке ❤️
ДМС со стоматологией с первого дня. Свободный график, можно совмещать с учебой. Крутые задачи и модные офисы.
Всю стажировку с вами будет опытный ментор, который всегда готов помочь.
Оставьте отклик на официальном сайте Альфа-Банка.
Узнать больше
#реклама
alfabank.ru
О рекламодателе
| 2 | Задача: 65. Valid Number
Сложность: hard
Учитывая строку s, определите, является ли s валидным числом.
Формально, валидное число определяется с использованием одного из следующих определений:
Целое число с необязательным показателем степени.
Десятичное число с необязательным показателем степени.
Целое число определяется необязательным знаком '-' или '+' за которым следуют цифры.
Пример:
Input: s = "0"
Output: true
👨💻 Алгоритм:
1️⃣Объявите три переменные: seenDigit, seenExponent и seenDot, установив их все в false. Перебирайте символы входной строки. Если символ является цифрой, установите seenDigit в true.
2️⃣Если символ является знаком (+ или -), проверьте, является ли он первым символом ввода или предшествует ли он показателю степени (экспоненте). Если нет, верните false. Если символ является экспонентой (e или E), сначала проверьте, была ли уже видна экспонента или еще не было увидено ни одной цифры. Если что-то из этого верно, верните false. В противном случае установите seenExponent в true и сбросьте seenDigit, потому что после экспоненты должно следовать новое целое число.
3️⃣Если символ — точка (.), проверьте, были ли уже видны точка или экспонента. Если да, верните false. Иначе установите seenDot в true. Если символ чему-то иначе, верните false. В конце верните значение seenDigit, потому что, например, ввод вида "21e" должен быть признан недействительным, если после e не следуют цифры.
😎 Решение:
var isNumber = function (s) {
var seenDigit = false;
var seenExponent = false;
var seenDot = false;
for (var i = 0; i < s.length; i++) {
var curr = s[i];
if (!isNaN(curr)) {
seenDigit = true;
} else if (curr == "+" || curr == "-") {
if (i > 0 && s[i - 1] != "e" && s[i - 1] != "E") {
return false;
}
} else if (curr == "e" || curr == "E") {
if (seenExponent || !seenDigit) {
return false;
}
seenExponent = true;
seenDigit = false;
} else if (curr == ".") {
if (seenDot || seenExponent) {
return false;
}
seenDot = true;
} else {
return false;
}
}
return seenDigit;
};
Ставь 👍 и забирай 📚 Базу знаний | 278 |
| 3 | Получи грант до 1,35 млн руб. на обучение в магистратуре
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
— 4 офлайн программы по востребованным направлениям ИТ
— 2 онлайн-программы: машинное обучение и продуктовый менеджмент
— 550 грантов до 75%
— Вечерние занятия и учеба по выходным — удобно совмещать с работой
— Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
— Возможность стажировок и трудоустройства в ведущих компаниях
— Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас!
Зарегистрироваться
#реклама 16+
cu.ru
О рекламодателе | 271 |
| 4 | Задача: 1122. Relative Sort Array
Сложность: easy
Даны два массива arr1 и arr2, элементы arr2 уникальны, и все элементы arr2 также присутствуют в arr1.
Отсортируйте элементы arr1 таким образом, чтобы относительный порядок элементов в arr1 был таким же, как в arr2. Элементы, которые не встречаются в arr2, должны быть размещены в конце arr1 в порядке возрастания.
Пример:
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
Output: [2,2,2,1,4,3,3,9,6,7,19]
👨💻 Алгоритм:
1⃣Инициализация и подсчёт:
Инициализируйте пустой массив result и массив remaining для хранения оставшихся элементов.
Создайте хеш-таблицу countMap для хранения количества вхождений каждого элемента из arr2 в arr1.
2⃣Заполнение countMap и remaining:
Пройдитесь по элементам arr1 и если элемент присутствует в countMap, увеличьте его счетчик. Если элемент не присутствует в arr2, добавьте его в remaining.
3⃣Формирование результирующего массива:
Пройдитесь по arr2 и добавьте элементы в result в соответствии с их количеством в countMap.
Отсортируйте массив remaining и добавьте его элементы в result.
Верните result в виде массива.
😎 Решение:
var relativeSortArray = function(arr1, arr2) {
let countMap = new Map();
let remaining = [];
let result = [];
for (let value of arr2) {
countMap.set(value, 0);
}
for (let value of arr1) {
if (countMap.has(value)) {
countMap.set(value, countMap.get(value) + 1);
} else {
remaining.push(value);
}
}
remaining.sort((a, b) => a - b);
for (let value of arr2) {
let count = countMap.get(value);
for (let i = 0; i < count; i++) {
result.push(value);
}
}
return result.concat(remaining);
};
Ставь 👍 и забирай 📚 Базу знаний | 258 |
| 5 | Внимание! Онлайн-подработка. Платят 5 000 ₽ в день
Нужно заполнять карточки товаров на ВБ, писать описания товаров и отвечать на отзывы. Все это вы делаете из дома.
Опыт, знания и город — не важны! От вас требуется только телефон.
Занятость 3-4 часа в день.
График свободный. Заработок зависит от вас.
Для старта в профессии нужно пройти бесплатное 3х-дневное обучение.
✅ Все проходит онлайн по 30-40 минут в день.
✅ Поймете всю суть работы с нуля от А до Я
✅ Все бесплатно. От вас только желание работать и зарабатывать.
Всего осталось 30 мест. Успевайте зарегистрироваться, пока есть возможность:
Зарегистрироваться
#реклама 16+
course.wildmanager.ru
О рекламодателе | 312 |
| 6 | Задача: 263. Ugly Number
Сложность: easy
Уродливое число — это положительное целое число, простые множители которого ограничены числами 2, 3 и 5.
Дано целое число n, верните true, если n является уродливым числом.
Пример:
Input: n = 6
Output: true
Explanation: 6 = 2 × 3
👨💻 Алгоритм:
1️⃣Если данное целое число n неположительное, верните false, так как неположительное число не может быть уродливым.
2️⃣Определите функцию keepDividingWhenDivisible, которая принимает два аргумента: делимое и делитель. Эта функция будет делить делимое на делитель до тех пор, пока оно делится без остатка. Функция возвращает измененное делимое. Последовательно примените эту функцию к n с делителями 2, 3 и 5.
3️⃣Если после всех делений n равно 1, верните true, иначе верните false.
😎 Решение:
class Solution {
isUgly(n) {
if (n <= 0) {
return false
}
for (const factor of [2, 3, 5]) {
n = this.keepDividingWhenDivisible(n, factor)
}
return n === 1
}
keepDividingWhenDivisible(dividend, divisor) {
while (dividend % divisor === 0) {
dividend /= divisor
}
return dividend
}
}
Ставь 👍 и забирай 📚 Базу знаний | 333 |
| 7 | Как стать QA с нуля и выйти на оффер от 150 К/мес
За 10 лет в IT я прошёл путь от первых шагов до Senior QA.
И знаю, как это выглядит изнутри:
Сначала не знаешь, с чего начать, и тонешь в инфе
Потом учишься, стараешься, но на собесах всё равно валишься
А дальше работа вроде есть, а зарплата годами стоит на месте
И всё время кажется, что проблема в тебе.
Но чаще всего проблема не в мотиваци, а в отсутствии системы.
Именно её я и выстраивал все эти годы: через ошибки, отказы и набитые шишки — пока не дошёл до офферов от X5, .bank, Bars Group и VL Projects.
А теперь собрал этот опыт в понятный маршрут и делюсь им в канале:
– как стартовать и расти в QA
– как наработать опыт для резюме
– как готовиться к собеседованиям
– как проходить отбор увереннее
– как выйти на оффер от 150К/мес
Подписывайся, пройдём этот путь вместе
Подписаться
#реклама 16+
edqa.ru
О рекламодателе | 356 |
| 8 | Задача: 1250. Check If It Is a Good Array
Сложность: hard
Дан массив nums из целых положительных чисел. Ваша задача - выбрать некоторое подмножество nums, умножить каждый элемент на целое число и сложить все эти числа.Массив считается хорошим, если из него можно получить сумму, равную 1, при любом возможном подмножестве и множителе. Верните True, если массив хороший, иначе верните False.
Пример:
Input: nums = [12,5,7,23]
Output: true
👨💻 Алгоритм:
1⃣Если наибольший общий делитель (НОД) всех чисел в массиве равен 1, то массив считается хорошим.
2⃣Если НОД всех чисел больше 1, то массив не считается хорошим
3⃣Получить сумму, равную 1, умножая и складывая элементы.
😎 Решение:
var isGoodArray = function(nums) {
let gcd = nums[0];
for (let num of nums) {
gcd = gcdFunc(gcd, num);
if (gcd === 1) return true;
}
return gcd === 1;
};
function gcdFunc(a, b) {
while (b !== 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
}
Ставь 👍 и забирай 📚 Базу знаний | 403 |
| 9 | Аренда VPS/VDS-сервера.
Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес.
Преимущества аренды:
- Выделенные ресурсы без переплаты;
- KVM-виртуализация;
- Быстрые NVMe SSD;
- Соответствие 152-ФЗ, PCI DSS;
- Бесплатная защита от DDoS;
- Управление через панель, API и Terraform;
- Техподдержка 24/7.
Запустите сервер за несколько минут!
Попробовать
#реклама 16+
selectel.ru
О рекламодателе | 386 |
| 10 | Осталось 3 часа до конца акции:
«Пожизненный PRO тариф — по цене 1 года»
Поиск работы отнимает силы, время и веру в себя, но не у тех кто использует easyoffer PRO. Успей сделать самую выгодную инвестицию в развитие своей карьеры.
Акция закончится уже сегодня 23 июня 23:59 по мск:
👉 https://easyoffer.ru/pro | 130 |
| 11 | Задача: 528. Random Pick with Weight
Сложность: medium
Вам дан массив положительных целых чисел w, где w[i] описывает вес индекса i.
Вам нужно реализовать функцию pickIndex(), которая случайным образом выбирает индекс в диапазоне [0, w.length - 1] (включительно) и возвращает его. Вероятность выбора индекса i равна w[i] / sum(w).
Например, если w = [1, 3], вероятность выбора индекса 0 составляет 1 / (1 + 3) = 0.25 (т.е. 25%), а вероятность выбора индекса 1 составляет 3 / (1 + 3) = 0.75 (т.е. 75%).
Пример:
Input
["Solution","pickIndex","pickIndex","pickIndex","pickIndex","pickIndex"]
[[[1,3]],[],[],[],[],[]]
Output
[null,1,1,1,1,0]
Explanation
Solution solution = new Solution([1, 3]);
solution.pickIndex(); // return 1. It is returning the second element (index = 1) that has a probability of 3/4.
solution.pickIndex(); // return 1
solution.pickIndex(); // return 1
solution.pickIndex(); // return 1
solution.pickIndex(); // return 0. It is returning the first element (index = 0) that has a probability of 1/4.
Since this is a randomization problem, multiple answers are allowed.
All of the following outputs can be considered correct:
[null,1,1,1,1,0]
[null,1,1,1,1,1]
[null,1,1,1,0,0]
[null,1,1,1,0,1]
[null,1,0,1,0,0]
......
and so on.
👨💻 Алгоритм:
1⃣ Инициализация и предобработка весов:
В конструкторе создайте массив накопительных сумм prefixSums, где каждая позиция будет содержать сумму всех предыдущих весов до текущего индекса включительно.
Также в конструкторе сохраните общую сумму весов totalSum.
2⃣ Генерация случайного числа и выбор индекса:
В функции pickIndex() сгенерируйте случайное число в диапазоне от 0 до общей суммы весов totalSum.
Используйте линейный поиск, чтобы найти первый индекс в prefixSums, который больше или равен сгенерированному числу.
3⃣ Возврат результата:
Верните найденный индекс.
😎 Решение:
class Solution {
constructor(w) {
this.prefixSums = new Array(w.length).fill(0);
let prefixSum = 0;
for (let i = 0; i < w.length; i++) {
prefixSum += w[i];
this.prefixSums[i] = prefixSum;
}
this.totalSum = prefixSum;
}
pickIndex() {
const target = this.totalSum * Math.random();
for (let i = 0; i < this.prefixSums.length; i++) {
if (target < this.prefixSums[i]) {
return i;
}
}
return this.prefixSums.length - 1;
}
}
Ставь 👍 и забирай 📚 Базу знаний | 409 |
| 12 | Задача: 521. Longest Uncommon Subsequence I
Сложность: easy
Даны две строки a и b. Верните длину самой длинной несообщей подпоследовательности между a и b. Если такой несообщей подпоследовательности не существует, верните -1.
Несообщая подпоследовательность между двумя строками — это строка, которая является подпоследовательностью только одной из них.
Пример:
Input: a = "aba", b = "cdc"
Output: 3
Explanation: One longest uncommon subsequence is "aba" because "aba" is a subsequence of "aba" but not "cdc".
Note that "cdc" is also a longest uncommon subsequence.
👨💻 Алгоритм:
1⃣Если строка a равна строке b, верните -1, так как не существует несообщей подпоследовательности.
2⃣В противном случае: Вычислите длины строк a и b. Верните длину более длинной строки.
😎 Решение:
var findLUSlength = function(a, b) {
if (a === b) {
return -1;
} else {
return Math.max(a.length, b.length);
}
};
Ставь 👍 и забирай 📚 Базу знаний | 401 |
| 13 | Последний день акции:
«Пожизненный PRO тариф — по цене 1 года»
🚀 PRO включает:
– Полный доступ ко всем грейдам и профессиям
– База live-coding задач и вопросов из технических собеседований с вероятностью их встречи
– Примеры лучших ответов от Senior разработчиков
– 1100+ записи реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.)
– База 400+ тестовых заданий от компаний.
– Автоотклики на вакансии в хедхантер
– Аналитика ТОП-требований из вакансий для лучшего написания резюме и прохождения ATS систем рекрутеров
– Генератор уникального резюме и CV под каждую вакансию
– Тренажеры подготовки к собеседованию: «Реальное собеседование» и «Проработка вопросов» по методике интервальных повторений (как Anki)
– (скоро) Агрегатор вакансий
– (скоро) Сообщество
Акция закончится уже сегодня 23 июня 23:59 по мск:
👉 https://easyoffer.ru/pro | 306 |
| 14 | Хочешь начать карьеру в ИТ на оплачиваемой стажировке?
Присоединяйся к ИТ-лагерю Т1 для студентов вузов технических и ИТ-специальностей. Теперь в обновлённом формате: ещё больше практики, доступ к платформам Т1, а участие — оплачивается и оформляется как стажировка.
За 2,5 месяца вместе с проектной командой ты пройдешь полный цикл создания ИТ-продукта: от идеи до разработки прототипа и финальной защиты. Превратить идею в проект помогут мастер-классы, общение с экспертами и погружение в процессы Т1.
Направления подготовки:
✅ ручное тестирование;
✅ прикладное администрирование (DevOps);
✅ системный анализ;
✅ фронтенд-разработка (React);
✅ бэкэнд-разработка (Java).
Подай заявку до 30 июня! Старт — в июле.
Узнать больше
#реклама 16+
career.t1.ru
О рекламодателе | 303 |
| 15 | Задача: 851. Loud and Rich
Сложность: medium
Есть группа из n человек, пронумерованных от 0 до n - 1, где у каждого человека разное количество денег и разный уровень спокойствия.
Вам дан массив richer, где richer[i] = [ai, bi] указывает на то, что ai имеет больше денег, чем bi, и целочисленный массив quiet, где quiet[i] — это уровень спокойствия i-го человека. Все данные в richer логически корректны (т.е. данные не приведут к ситуации, где x богаче y и y богаче x одновременно).
Верните целочисленный массив answer, где answer[x] = y, если y — это самый спокойный человек (то есть человек y с наименьшим значением quiet[y]) среди всех людей, которые однозначно имеют столько же или больше денег, чем человек x.
Пример:
Input: richer = [[1,0],[2,1],[3,1],[3,7],[4,3],[5,3],[6,3]], quiet = [3,2,5,4,6,1,7,0]
Output: [5,5,2,5,4,5,6,7]
Explanation:
answer[0] = 5.
Person 5 has more money than 3, which has more money than 1, which has more money than 0.
The only person who is quieter (has lower quiet[x]) is person 7, but it is not clear if they have more money than person 0.
answer[7] = 7.
Among all people that definitely have equal to or more money than person 7 (which could be persons 3, 4, 5, 6, or 7), the person who is the quietest (has lower quiet[x]) is person 7.
The other answers can be filled out with similar reasoning.
👨💻 Алгоритм:
1⃣Постройте граф, описанный выше, и пусть dfs(person) будет самым спокойным человеком в поддереве person. Обратите внимание, что из-за логической последовательности утверждений граф должен быть DAG — ориентированным графом без циклов.
2⃣Теперь dfs(person) — это либо сам person, либо min(dfs(child) для каждого child из person). То есть, самый спокойный человек в поддереве — это либо сам person, либо самый спокойный человек в каком-то поддереве потомка person.
3⃣Мы можем кэшировать значения dfs(person) в answer[person], выполняя обход графа в пост-обходе. Таким образом, мы не повторяем работу. Этот метод уменьшает квадратичное время выполнения алгоритма до линейного.
😎 Решение:
var loudAndRich = function(richer, quiet) {
let N = quiet.length;
let graph = Array.from({ length: N }, () => []);
let answer = Array(N).fill(-1);
for (let [u, v] of richer) {
graph[v].push(u);
}
let dfs = function(node) {
if (answer[node] === -1) {
answer[node] = node;
for (let child of graph[node]) {
let cand = dfs(child);
if (quiet[cand] < quiet[answer[node]]) {
answer[node] = cand;
}
}
}
return answer[node];
};
for (let node = 0; node < N; node++) {
dfs(node);
}
return answer;
};
Ставь 👍 и забирай 📚 Базу знаний | 363 |
| 16 | Системный администратор для юр. лиц / IT-аутсорсинг
Айти-аутсорсинг для бизнеса.
– Устраняем проблемы и сбои в работе офисной техники;
– Обеспечиваем безопасность вашей IT-инфраструктуры;
– Обновляем и настраиваем программное обеспечение;
– Подключаем и настраиваем удаленный доступ.
Оперативно поможем с любым вопросом – от консультации до поддержки. Оставляйте заявку на сайте и наши специалисты свяжутся с вами.
Узнать больше
#реклама
it-tula.ru
О рекламодателе | 339 |
| 17 | Пожизненный PRO тариф — по цене 1 года.
Покупаешь один раз — пользуешься всю жизнь:
👉 https://easyoffer.ru/pro
🚀 PRO-доступ закроет 99% проблем на пути к офферу:
1. Полный доступ ко всем грейдам и профессиям. Не важно, Junior вы или Senior, Тестировщик, Разработчик, Проджект — вы получите материалы под ваш текущий уровень и цели, без ограничений.
2. База live-coding задач и вопросов с реальных собесов с уникальной системой вероятности их встречи. Вы будете готовиться не вслепую, а точечно по тем темам, которые спрашивают чаще всего.
3. Эталонные ответы от Senior-разработчиков. Никакой воды и догадок — только четкие, структурированные решения, за которые дают «зеленый свет» к офферу
4. 1100+ записей реальных собеседований (включая топы: Сбер, Авито, Яндекс, WB, OZON, МТС). Вы увидите всё изнутри: как спрашивают, как отвечают сильные кандидаты и на каких ошибках проваливаются 80% проходящих.
5. База 400+ тестовых заданий. Если вы еще студент, то практикуйтесь на решении задач, которые помогут попасть на собес
6. Автоотклики на Хедхантере — пока вы спите, ваше резюме летит к рекрутерам автоматически. Это экономия сотен часов ручного кликанья.
7. Аналитика ТОП-требований из вакансий. Мы парсим рынок и показываем, какие скиллы сейчас в цене. Это позволит вам точечно апгрейдить резюме и проходить суровые ATS-фильтры (которые отсеивают до 75% резюме еще до просмотра рекрутером).
8. Генератор уникального резюме и CV под каждую вакансию. Забудьте про «универсальное» резюме — нейросеть адаптирует ваш опыт под конкретную позицию за минуту, повышая шансы на приглашение в разы.
9. Тренажеры подготовки к собеседованию:
«Реальное собеседование» — сценарий вопросов из реальных интервью
«Проработка вопросов» — флеш карточки с вопросами/ответами по методике интервальных повторений (как Anki)
10. (Скоро) Агрегатор вакансий — все вакансии из HH, Telegram, LinkedIn и других площадок в одной ленте.
11. (Скоро) Закрытое комьюнити — нетворкинг и помощь в сложных вопросах от таких же целеустремленных айтишников.
Завтра последний день акции:
👉 https://easyoffer.ru/pro | 311 |
| 18 | Задача: 861. Score After Flipping Matrix
Сложность: hard
Дан целочисленный массив nums и целое число k. Верните длину самой короткой непустой подмассива nums, сумма которого составляет как минимум k. Если такого подмассива нет, верните -1.
Подмассив — это непрерывная часть массива.
Пример:
Input: nums = [1], k = 1
Output: 1
👨💻 Алгоритм:
1⃣Создайте "моноочередь" индексов P: дек индексов x_0, x_1, ..., так чтобы P[x_0], P[x_1], ... увеличивались.
2⃣При добавлении нового индекса y, удалите x_i из конца дека, чтобы P[x_0], P[x_1], ..., P[y] увеличивались.
3⃣Если P[y] >= P[x_0] + K, то (как описано ранее) мы больше не рассматриваем этот x_0 и удаляем его из начала дека.
😎 Решение:
var shortestSubarray = function(A, K) {
const N = A.length;
const P = new Array(N + 1).fill(0);
for (let i = 0; i < N; ++i) {
P[i + 1] = P[i] + A[i];
}
let ans = N + 1;
const monoq = [];
for (let y = 0; y < P.length; ++y) {
while (monoq.length > 0 && P[y] <= P[monoq[monoq.length - 1]]) {
monoq.pop();
}
while (monoq.length > 0 && P[y] >= P[monoq[0]] + K) {
ans = Math.min(ans, y - monoq.shift());
}
monoq.push(y);
}
return ans < N + 1 ? ans : -1;
};
Ставь 👍 и забирай 📚 Базу знаний | 374 |
| 19 | Нужны 7 желающих для работы с искусственным интеллектом.
Требования: 18-45 лет
Работа из дома. График свободный.
Пришло задание — изучили — выполнили — получили свои деньги.
Деньги вы получаете в зависимости от сложности задания. Например:
За задание могут платить 500-10.000 рублей.
500 рублей — это около 5-30 минут.
10 000 руб. это 5-6 часов.
Работа может быть разной: Оживить фото, создать видео, реставрировать старое фото и т.д.
💰 В среднем новичок получает до 150.000 руб в месяц. А опытный может и 300-500т.
Мы обучим вас сами:
— 3 дня уроков по 30 минут
— Домашки с проверкой и оплатой бонусами
— Платим 10 тыс за каждую выполненную домашку
⚡ Набор заканчивается завтра.
Для регистрации жмите кнопку "Зарегистрироваться":
Зарегистрироваться
#реклама 16+
course.neurogansta.ru
О рекламодателе | 342 |
| 20 | Задача: 1234. Replace the Substring for Balanced String
Сложность: medium
Вам дана строка s длины n, содержащая только четыре вида символов: 'Q', 'W', 'E' и 'R'. Строка считается сбалансированной, если каждый из ее символов встречается n / 4 раз, где n - длина строки. Верните минимальную длину подстроки, которую можно заменить любой другой строкой той же длины, чтобы сделать s сбалансированной. Если s уже сбалансирована, верните 0.
Пример:
Input: s = "QWER"
Output: 0
👨💻 Алгоритм:
1⃣Проверка баланса:
Сначала проверим, сбалансирована ли строка s. Если да, то возвращаем 0.
2⃣Подсчет частоты символов:
Подсчитаем количество каждого символа в строке s.
3⃣Использование скользящего окна:
Используем метод двух указателей (скользящее окно) для нахождения минимальной подстроки, которую можно заменить, чтобы строка стала сбалансированной.
Начнем с окна, которое захватывает всю строку, и будем постепенно уменьшать его, проверяя при каждом шаге, становится ли строка сбалансированной.
😎 Решение:
var balancedString = function(s) {
const n = s.length;
const count = new Map();
for (const c of s) {
count.set(c, (count.get(c) || 0) + 1);
}
const target = n / 4;
const isBalanced = () => {
return 'QWER'.split('').every(c => (count.get(c) || 0) <= target);
};
if (isBalanced()) return 0;
let minLength = n;
let left = 0;
for (let right = 0; right < n; right++) {
count.set(s[right], count.get(s[right]) - 1);
while (isBalanced()) {
minLength = Math.min(minLength, right - left + 1);
count.set(s[left], (count.get(s[left]) || 0) + 1);
left++;
}
}
return minLength;
};
Ставь 👍 и забирай 📚 Базу знаний | 371 |
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
