en
Feedback
JavaScript | LeetCode

JavaScript | LeetCode

Open in Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Show more
8 633
Subscribers
-424 hours
-267 days
-10130 days
Attracting Subscribers
July '26
July '26
+19
in 0 channels
June '26
+45
in 1 channels
Get PRO
May '26
+32
in 0 channels
Get PRO
April '26
+47
in 0 channels
Get PRO
March '26
+26
in 0 channels
Get PRO
February '26
+38
in 0 channels
Get PRO
January '26
+48
in 0 channels
Get PRO
December '25
+39
in 1 channels
Get PRO
November '25
+161
in 0 channels
Get PRO
October '25
+173
in 0 channels
Get PRO
September '25
+129
in 0 channels
Get PRO
August '25
+165
in 0 channels
Get PRO
July '25
+175
in 1 channels
Get PRO
June '25
+173
in 2 channels
Get PRO
May '25
+204
in 2 channels
Get PRO
April '25
+356
in 0 channels
Get PRO
March '25
+320
in 5 channels
Get PRO
February '25
+439
in 5 channels
Get PRO
January '25
+534
in 53 channels
Get PRO
December '24
+232
in 0 channels
Get PRO
November '24
+292
in 0 channels
Get PRO
October '24
+681
in 17 channels
Get PRO
September '24
+2 356
in 332 channels
Get PRO
August '24
+464
in 0 channels
Get PRO
July '24
+2 250
in 219 channels
Get PRO
June '24
+3 130
in 234 channels
Date
Subscriber Growth
Mentions
Channels
22 July0
21 July0
20 July0
19 July0
18 July+3
17 July+1
16 July0
15 July+1
14 July+1
13 July0
12 July+1
11 July+1
10 July0
09 July0
08 July+2
07 July0
06 July+1
05 July+4
04 July+2
03 July0
02 July+1
01 July+1
Channel Posts
Задача: 920. Number of Music Playlists Сложность: hard В вашем плеере есть n разных песен. Во время путешествия вы хотите прослушать goal песен (не обязательно разных). Чтобы избежать скуки, вы создадите плейлист таким образом, чтобы: каждая песня играла хотя бы один раз. Песня может быть проиграна снова только в том случае, если было проиграно k других песен. Учитывая n, цель и k, верните количество возможных плейлистов, которые вы можете создать. Поскольку ответ может быть очень большим, верните его по модулю 10^9 + 7. Пример:
Input: n = 3, goal = 3, k = 1
Output: 6
👨‍💻 Алгоритм: 1⃣Создать двумерный массив dp, где dp[i][j] представляет количество возможных плейлистов длины i, содержащих j различных песен. 2⃣Инициализировать dp[0][0] = 1, что означает, что существует один способ создать плейлист длины 0 с 0 песнями. Заполнить массив dp, используя два случая: Добавление новой песни, которая не была проиграна раньше: dp[i][j] += dp[i-1][j-1] * (n - j + 1) Повторное проигрывание песни, если было проиграно k других песен: dp[i][j] += dp[i-1][j] * max(j - k, 0) 3⃣Ответ находится в dp[goal][n]. 😎 Решение:
var numMusicPlaylists = function(n, goal, k) {
    const MOD = 10**9 + 7;
    let dp = Array.from({ length: goal + 1 }, () => Array(n + 1).fill(0));
    dp[0][0] = 1;

    for (let i = 1; i <= goal; i++) {
        for (let j = 1; j <= n; j++) {
            dp[i][j] = dp[i-1][j-1] * (n - j + 1) % MOD;
            if (j > k) {
                dp[i][j] = (dp[i][j] + dp[i-1][j] * (j - k) % MOD) % MOD;
            }
        }
    }

    return dp[goal][n];
};
Ставь 👍 и забирай 📚 Базу знаний

2
🔍Тестовое собеседование с ТимЛидом Frontend-разработки в этот четверг 23 июля(уже завтра!) в 19:00 по мск приходи онлайн на
🔍Тестовое собеседование с ТимЛидом Frontend-разработки в этот четверг 23 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика. Как это будет: 📂 Алексей Романов, Teamlead в Underhood.dev с опытом 6+ лет, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Алексей будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Алексею Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot Реклама. О рекламодателе.
176
3
Хотите внедрить ИИ, но не знаете с чего начать? ГигаАкадемия запустила ИИ-менторинг — индивидуальную сессию с практикующим эк
Хотите внедрить ИИ, но не знаете с чего начать? ГигаАкадемия запустила ИИ-менторинг — индивидуальную сессию с практикующим экспертом для собственников и бенефициаров. Никакой теории. Только вы, эксперт и ваша задача. Три часа фокуса на вашем запросе. Ментор разбирает процессы, данные и ограничения и помогает определить, где ИИ быстрее всего даст бизнес-эффект и повлияет на рост выручки. Вы уходите не с вдохновением, а с планом: — карта вашего ИИ-кейса: задача, эффект, риски — 3 приоритетных сценария — где ценность выше, а запуск проще — дорожная карта пилота на 2–6 недель Цель ментора — усилить вашу экспертизу: научить самостоятельно находить, оценивать и запускать ИИ-решения. ИИ уже готов работать на вас. А вы готовы взять его в партнёры? Оставьте заявку на сайте и получите консультацию. Узнать больше Номер реестровой записи: С502024004938. #реклама 16+ sberuniversity.ru О рекламодателе
204
4
Задача: 422. Valid Word Square Сложность: easy Дан массив строк words, верните true, если он образует правильный квадрат слов. Последовательность строк образует правильный квадрат слов, если k-я строка и k-й столбец читаются одинаково, где 0 <= k < max(numRows, numColumns). Пример: Input: words = ["abcd","bnrt","crmy","dtye"] Output: true Explanation: The 1st row and 1st column both read "abcd". The 2nd row and 2nd column both read "bnrt". The 3rd row and 3rd column both read "crmy". The 4th row and 4th column both read "dtye". Therefore, it is a valid word square. 👨‍💻 Алгоритм: 1⃣Инициализируйте переменные: cols для максимальной длины слов в массиве, rows для количества строк в массиве words, и пустой массив newWords для хранения новых слов, представленных каждым столбцом. 2⃣Итерация по массиву words, определение максимальной длины слова для cols, проверка, что количество строк равно количеству столбцов. Если условие не выполняется, возвращаем false. 3⃣Для каждого столбца col от 0 до cols - 1, формируем строку newWord из символов на позиции (row, col) для каждой строки. Сохраняем newWord в массиве newWords. В конце, если newWords и words равны, возвращаем true, иначе false. 😎 Решение: class Solution { validWordSquare(words) { let cols = 0; const rows = words.length; const newWords = []; for (const word of words) { cols = Math.max(cols, word.length); } if (cols !== words[0].length || rows !== cols) { return false; } for (let col = 0; col < cols; ++col) { let newWord = ""; for (let row = 0; row < rows; ++row) { if (col < words[row].length) { newWord += words[row][col]; } } newWords.push(newWord); } return words.join(",") === newWords.join(","); } } Ставь 👍 и забирай 📚 Базу знаний
202
5
Регистрируйся на ИТ-Пикник от Т-Банка 8 августа 8 августа — время отложить ноутбуки и встретиться офлайн на ИТ-Пикнике от Т-Б+8
Регистрируйся на ИТ-Пикник от Т-Банка 8 августа 8 августа — время отложить ноутбуки и встретиться офлайн на ИТ-Пикнике от Т-Банка в музее-заповеднике «Коломенское». Вот сколько всего запланировано: — научпоп-лекции; — мастер-классы; — дискуссии об ИИ и больших языковых моделях; — доклады о кибербезопасности; — примеры, как данные из логов становятся решениями; — много музыки. Бери с собой друзей, супругов и детей — каждый найдет себе что-то по душе. Узнать больше #реклама 16+ it-picnic.ru О рекламодателе
292
6
Задача: 1420. Build Array Where You Can Find The Maximum Exactly K Comparisons Сложность: hard Вам даны три целых числа n, m и k. Рассмотрим следующий алгоритм для нахождения максимального элемента в массиве положительных целых чисел: maximum_value = -1 maximum_index = -1 search_cost = 0 n = arr.length for (i = 0; i < n; i++){ if (maximum_value < arr[i]){ maximum_value = arr[i] maximum_index = i search_cost = search_cost + 1 } } return maximum_index Вам необходимо построить массив arr, который имеет следующие свойства: arr содержит ровно n целых чисел. 1 <= arr[i] <= m, где (0 <= i < n). После применения указанного алгоритма к arr, значение search_cost равно k. Верните количество способов построить массив arr с учетом указанных условий. Так как ответ может быть очень большим, ответ должен быть вычислен по модулю 10^9 + 7. Пример: Input: n = 2, m = 3, k = 1 Output: 6 Explanation: The possible arrays are [1, 1], [2, 1], [2, 2], [3, 1], [3, 2] [3, 3] 👨‍💻 Алгоритм: 1⃣Инициализация и базовые случаи: Инициализируем 3D массив dp размером [n+1][m+1][k+1]. Устанавливаем базовые случаи: dp[n][...][0] = 1. 2⃣Итерация и обновление массива dp: Проходим в обратном порядке по индексам i от n-1 до 0, по maxSoFar от m до 0 и по remain от 0 до k. Для каждого из этих значений обновляем dp массив, используя предыдущие результаты для вычисления текущих значений. 3⃣Возврат результата: Возвращаем значение dp[0][0][k], которое является решением исходной задачи. 😎 Решение: var numOfArrays = function(n, m, k) { const MOD = 1_000_000_007; const dp = Array.from({ length: n + 1 }, () => Array.from({ length: m + 1 }, () => Array(k + 1).fill(0))); for (let num = 0; num <= m; num++) { dp[n][num][0] = 1; } for (let i = n - 1; i >= 0; i--) { for (let maxSoFar = m; maxSoFar >= 0; maxSoFar--) { for (let remain = 0; remain <= k; remain++) { let ans = 0; for (let num = 1; num <= maxSoFar; num++) { ans = (ans + dp[i + 1][maxSoFar][remain]) % MOD; } if (remain > 0) { for (let num = maxSoFar + 1; num <= m; num++) { ans = (ans + dp[i + 1][num][remain - 1]) % MOD; } } dp[i][maxSoFar][remain] = ans; } } } return dp[0][0][k]; }; Ставь 👍 и забирай 📚 Базу знаний
252
7
Научись делать инфографику для маркетплейсов. Курс 0 р. Онлайн-программа с наставником и чатом. Внимание! 80% практики. ✅По р
Научись делать инфографику для маркетплейсов. Курс 0 р. Онлайн-программа с наставником и чатом. Внимание! 80% практики. ✅По результату обучения у вас будет портфолио из нескольких работ. ✅Сертификат о прохождении курса. ✅Возможность пройти полное обучение и получить карьерное сопровождение! Учитесь дизайну у профессионалов в Yudaev Shool. Переходи по кнопки: "Подробнее" и начинай свое обучение. Доступ 0 руб. Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе
294
8
Задача: 412. Fizz Buzz Сложность: easy Учитывая целое число n, верните строковый массив answer (с индексом 1), где: answer[i] == "FizzBuzz", если i делится на 3 и 5. answer[i] == "Fizz", если i делится на 3. answer[i] == "Buzz", если i делится на 5. answer[i] == i (как строка), если ни одно из перечисленных условий не верно. Пример: Input: nums = [1,2,2] Output: [[],[1],[1,2],[1,2,2],[2],[2,2]] 👨‍💻 Алгоритм: 1⃣Создайте пустой список для хранения результата. 2⃣Пройдите по всем числам от 1 до n и для каждого числа выполните проверку: Если число делится на 3 и на 5, добавьте "FizzBuzz". Если число делится на 3, добавьте "Fizz". Если число делится на 5, добавьте "Buzz". Если ни одно из условий не выполнено, добавьте само число как строку. 3⃣Верните полученный список. 😎 Решение: function fizzBuzz(n) { const answer = []; for (let i = 1; i <= n; i++) { if (i % 3 === 0 && i % 5 === 0) { answer.push("FizzBuzz"); } else if (i % 3 === 0) { answer.push("Fizz"); } else if (i % 5 === 0) { answer.push("Buzz"); } else { answer.push(i.toString()); } } return answer; } Ставь 👍 и забирай 📚 Базу знаний
300
9
Получите 400 рублей на счет мобильного телефона Выберите Яндекс Поиск в настройках браузера, ищите в нём — и они ваши! Узнать
Получите 400 рублей на счет мобильного телефона Выберите Яндекс Поиск в настройках браузера, ищите в нём — и они ваши! Узнать больше #реклама 16+ portal.yandex.ru О рекламодателе
296
10
Задача: 674. Longest Continuous Increasing Subsequence Сложность: easy Дан неотсортированный массив целых чисел nums, верните длину самой длинной непрерывной возрастающей подпоследовательности (т.е. подмассива). Подпоследовательность должна быть строго возрастающей. Непрерывная возрастающая подпоследовательность определяется двумя индексами l и r (l < r) так, что она имеет вид [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] и для каждого l <= i < r выполняется nums[i] < nums[i + 1]. Пример: Input: nums = [1,3,5,4,7] Output: 3 Explanation: The longest continuous increasing subsequence is [1,3,5] with length 3. Even though [1,3,5,7] is an increasing subsequence, it is not continuous as elements 5 and 7 are separated by element 4. 👨‍💻 Алгоритм: 1⃣Каждая (непрерывная) возрастающая подпоследовательность не пересекается, и граница каждой такой подпоследовательности возникает, когда nums[i-1] >= nums[i]. В этом случае начинается новая возрастающая подпоследовательность с nums[i], и мы сохраняем такой i в переменной anchor. 2⃣Например, если nums = [7, 8, 9, 1, 2, 3], то anchor начинается с 0 (nums[anchor] = 7) и затем устанавливается на anchor = 3 (nums[anchor] = 1). Независимо от значения anchor, мы записываем кандидата на ответ длиной i - anchor + 1, длина подмассива nums[anchor], nums[anchor+1], ..., nums[i], и наш ответ обновляется соответствующим образом. 3⃣Возвращаем максимальную длину найденной непрерывной возрастающей подпоследовательности. 😎 Решение: var findLengthOfLCIS = function(nums) { let ans = 0, anchor = 0; for (let i = 0; i < nums.length; ++i) { if (i > 0 && nums[i - 1] >= nums[i]) { anchor = i; } ans = Math.max(ans, i - anchor + 1); } return ans; } Ставь 👍 и забирай 📚 Базу знаний
316
11
Как стать QA с нуля и выйти на оффер от 150 К/мес Если ты: — хочешь стать тестировщиком, но не знаешь, с чего начать — уже уч
Как стать QA с нуля и выйти на оффер от 150 К/мес Если ты: — хочешь стать тестировщиком, но не знаешь, с чего начать — уже учился QA сам или на курсах, но до оффера так и не дошёл — работаешь в IT/QA, но хочешь выйти на оффер выше Проблема в том, что многие заходят в IT вслепую: смотрят ролики, проходят курсы, но всё равно не понимают, что учить, где брать практику и как проходить собеседования. Без системы легко застрять на любом этапе: на старте, после обучения или уже в работе. В канале я делюсь фишками, которые провели меня от джуна без опыта до офферов в X5, .bank и MTS Digital: — с чего начать — что нужно для первого оффера — как расти в доходе в QA Подписывайся Подписаться #реклама 16+ edqa.ru О рекламодателе
271
12
Задача: 1295. Find Numbers with Even Number of Digits Сложность: easy Дан массив чисел nums. Верните количество чисел в массиве, которые содержат четное количество цифр. Пример: Input: nums = [12,345,2,6,7896] Output: 2 Explanation: 12 contains 2 digits (even number of digits). 345 contains 3 digits (odd number of digits). 2 contains 1 digit (odd number of digits). 6 contains 1 digit (odd number of digits). 7896 contains 4 digits (even number of digits). Therefore only 12 and 7896 contain an even number of digits. 👨‍💻 Алгоритм: 1⃣Определите вспомогательную функцию hasEvenDigits, которая принимает num в качестве входных данных и возвращает true, если количество цифр четное, иначе возвращает false. 2⃣Внутри функции hasEvenDigits. Инициализируйте переменную digitCount значением 0. Пока num не равно нулю: Увеличивайте digitCount на 1. Делите num на 10. Возвращайте digitCount & 1 == 0. 3⃣В функции findNumbers. Инициализируйте переменную evenDigitCount значением 0. Для каждого числа num в массиве nums, проверяйте, возвращает ли hasEvenDigits(num) значение true. Если да, увеличивайте evenDigitCount на 1. Возвращайте evenDigitCount. 😎 Решение: class Solution { hasEvenDigits(num) { let digitCount = 0 while (num > 0) { digitCount++ num = Math.floor(num / 10) } return (digitCount & 1) === 0 } findNumbers(nums) { let evenDigitCount = 0 for (let num of nums) { if (this.hasEvenDigits(num)) { evenDigitCount++ } } return evenDigitCount } } Ставь 👍 и забирай 📚 Базу знаний
290
13
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пр
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе
297
14
Задача: 1125. Smallest Sufficient Team Сложность: hard В проекте у вас есть список необходимых навыков req_skills и список людей. i-й человек people[i] содержит список навыков, которыми обладает этот человек. Рассмотрим достаточную команду: набор людей, такой что для каждого необходимого навыка из req_skills, есть по крайней мере один человек в команде, который обладает этим навыком. Мы можем представить эти команды индексами каждого человека. Например, команда = [0, 1, 3] представляет людей с навыками people[0], people[1] и people[3]. Верните любую достаточную команду наименьшего возможного размера, представленную индексами каждого человека. Вы можете вернуть ответ в любом порядке. Гарантируется, что ответ существует. Пример: Input: req_skills = ["algorithms","math","java","reactjs","csharp","aws"], people = [["algorithms","math","java"],["algorithms","math","reactjs"], ["java","csharp","aws"],["reactjs","csharp"],["csharp","math"],["aws","java"]] Output: [1,2] 👨‍💻 Алгоритм: 1⃣Инициализация и создание масок навыков: Определите количество людей n и количество необходимых навыков m. Создайте хэш-таблицу skillId, чтобы сопоставить каждому навыку уникальный индекс. Создайте массив skillsMaskOfPerson, который будет содержать битовые маски навыков для каждого человека. 2⃣Динамическое программирование (DP): Создайте массив dp размера 2^m и заполните его значениями (1 << n) - 1. Установите dp[0] в 0 (базовый случай). Для каждого skillsMask от 1 до 2^m - 1: - для каждого человека i: - вычислите smallerSkillsMask как skillsMask & ~skillsMaskOfPerson[i]. - если smallerSkillsMask отличается от skillsMask, обновите dp[skillsMask], если новая команда лучше (имеет меньше установленных битов). 3⃣Формирование ответа: Извлеките ответ из dp и верните массив индексов людей, составляющих минимальную достаточную команду. 😎 Решение: var smallestSufficientTeam = function(req_skills, people) { const n = people.length, m = req_skills.length; const skillId = new Map(req_skills.map((skill, i) => [skill, i])); const skillsMaskOfPerson = Array(n).fill(0); for (let i = 0; i < n; i++) { for (const skill of people[i]) { if (skillId.has(skill)) { skillsMaskOfPerson[i] |= 1 << skillId.get(skill); } } } const dp = Array(1 << m).fill((1 << n) - 1); dp[0] = 0; for (let skillsMask = 1; skillsMask < (1 << m); skillsMask++) { for (let i = 0; i < n; i++) { const smallerSkillsMask = skillsMask & ~skillsMaskOfPerson[i]; if (smallerSkillsMask !== skillsMask) { const peopleMask = dp[smallerSkillsMask] | (1 << i); if (bitCount(peopleMask) < bitCount(dp[skillsMask])) { dp[skillsMask] = peopleMask; } } } } const answerMask = dp[(1 << m) - 1]; const result = []; for (let i = 0; i < n; i++) { if ((answerMask >> i) & 1) { result.push(i); } } return result; }; function bitCount(n) { let count = 0; while (n) { count += n & 1; n >>= 1; } return count; } Ставь 👍 и забирай 📚 Базу знаний
284
15
И вы знаете Поэтому просто ещё раз обозначим, что промокод NETSIL скинет 5000 рублей при бронировании жилья на Яндекс Путешес
И вы знаете Поэтому просто ещё раз обозначим, что промокод NETSIL скинет 5000 рублей при бронировании жилья на Яндекс Путешествиях. Забронировать #реклама travel.yandex.ru О рекламодателе
276
16
Задача: 846. Hand of Straights Сложность: medium У Алисы есть некоторое количество карт, и она хочет переставить карты в группы так, чтобы каждая группа была размером groupSize и состояла из groupSize последовательных карт. Дан целочисленный массив hand, где hand[i] — это значение, написанное на i-й карте, и целое число groupSize. Верните true, если она может переставить карты, или false в противном случае. Пример: Input: hand = [1,2,3,6,2,3,4,7,8], groupSize = 3 Output: true Explanation: Alice's hand can be rearranged as [1,2,3],[2,3,4],[6,7,8] 👨‍💻 Алгоритм: 1⃣Проверьте, делится ли длина массива hand на groupSize. Если нет, верните false. 2⃣Создайте карту cardCount для хранения количества каждой карты в массиве hand. 3⃣Итерируйте по массиву hand и обновляйте карту cardCount. Затем итерируйте снова для создания групп: Найдите начальную карту startCard для потенциальной последовательности, уменьшая startCard, пока не найдёте карту, которая отсутствует в карте cardCount. Попробуйте сформировать последовательность из groupSize карт, начиная с startCard. Если какая-либо карта в потенциальной последовательности отсутствует в карте cardCount, верните false. Если последовательность можно сформировать, уменьшите количество каждой карты в последовательности в карте cardCount. 😎 Решение: var isNStraightHand = function(hand, groupSize) { if (hand.length % groupSize !== 0) { return false; } const cardCount = new Map(); for (let card of hand) { cardCount.set(card, (cardCount.get(card) || 0) + 1); } hand.sort((a, b) => a - b); for (let card of hand) { if (cardCount.get(card) === 0) { continue; } for (let nextCard = card; nextCard < card + groupSize; nextCard++) { if ((cardCount.get(nextCard) || 0) === 0) { return false; } cardCount.set(nextCard, cardCount.get(nextCard) - 1); } } return true; }; Ставь 👍 и забирай 📚 Базу знаний
350
17
Больше выгоды с подпиской Kaspersky Premium Купите подписку Kaspersky Premium сейчас и получите скидку до 28%, гарантированны
Больше выгоды с подпиской Kaspersky Premium Купите подписку Kaspersky Premium сейчас и получите скидку до 28%, гарантированные призы от наших партнёров, а также шанс выиграть путешествие! Узнать больше #реклама 16+ kaspersky.ru О рекламодателе
305
18
Задача: 288. Unique Word Abbreviation Сложность: medium Сокращение слова — это объединение его первой буквы, количества символов между первой и последней буквой и последней буквы. Если слово состоит только из двух символов, то оно является сокращением само по себе. Например: dog --> d1g, потому что между первой буквой 'd' и последней буквой 'g' одна буква. internationalization --> i18n, потому что между первой буквой 'i' и последней буквой 'n' 18 букв. it --> it, потому что любое слово из двух символов является своим собственным сокращением. Реализуйте класс ValidWordAbbr: ValidWordAbbr(String[] dictionary) Инициализирует объект со словарем слов. boolean isUnique(string word) Возвращает true, если выполняется одно из следующих условий (в противном случае возвращает false): В словаре нет слова, сокращение которого равно сокращению слова word. Для любого слова в словаре, сокращение которого равно сокращению слова word, это слово и word одинаковы. Пример: Input ["ValidWordAbbr", "isUnique", "isUnique", "isUnique", "isUnique", "isUnique"] [[["deer", "door", "cake", "card"]], ["dear"], ["cart"], ["cane"], ["make"], ["cake"]] Output [null, false, true, false, true, true] Explanation ValidWordAbbr validWordAbbr = new ValidWordAbbr(["deer", "door", "cake", "card"]); validWordAbbr.isUnique("dear"); // return false, dictionary word "deer" and word "dear" have the same abbreviation "d2r" but are not the same. validWordAbbr.isUnique("cart"); // return true, no words in the dictionary have the abbreviation "c2t". validWordAbbr.isUnique("cane"); // return false, dictionary word "cake" and word "cane" have the same abbreviation "c2e" but are not the same. validWordAbbr.isUnique("make"); // return true, no words in the dictionary have the abbreviation "m2e". validWordAbbr.isUnique("cake"); // return true, because "cake" is already in the dictionary and no other word in the dictionary has "c2e" abbreviation. 👨‍💻 Алгоритм: 1⃣Инициализация: Создайте словарь сокращений abbrDict, который будет хранить сокращения слов в виде ключей и булевы значения, указывающие, уникально ли сокращение. Создайте множество dict, содержащее все слова из словаря, чтобы быстро проверять наличие слова в словаре. 2⃣Генерация сокращений: При инициализации объекта ValidWordAbbr пройдите через каждое слово в словаре и создайте его сокращение. Если сокращение уже существует в abbrDict, установите значение в false (не уникальное). В противном случае установите значение в true (уникальное). 3⃣Проверка уникальности: Для метода isUnique создайте сокращение для входного слова и проверьте, есть ли это сокращение в abbrDict. Если сокращение отсутствует в abbrDict, возвращайте true. Если сокращение присутствует и оно уникально, проверьте, есть ли это слово в словаре. Если да, возвращайте true, в противном случае - false. 😎 Решение: class ValidWordAbbr { constructor(dictionary) { this.abbrDict = new Map(); this.dict = new Set(dictionary); for (const word of this.dict) { const abbr = this.toAbbr(word); this.abbrDict.set(abbr, !this.abbrDict.get(abbr)); } } isUnique(word) { const abbr = this.toAbbr(word); const hasAbbr = this.abbrDict.get(abbr); return hasAbbr === undefined || (hasAbbr && this.dict.has(word)); } toAbbr(word) { const n = word.length; if (n <= 2) { return word; } return `${word[0]}${n - 2}${word[n - 1]}`; } } Ставь 👍 и забирай 📚 Базу знаний
375
19
Честный пробный урок английского в «Инглекс» Онлайн-школа «Инглекс» приглашает на бесплатный пробный урок. Это не демо-версия
Честный пробный урок английского в «Инглекс» Онлайн-школа «Инглекс» приглашает на бесплатный пробный урок. Это не демо-версия, а полноценное занятие с преподавателем, который определит ваш реальный уровень и расскажет, как двигаться дальше. На уроке вы: — пройдете тестирование: грамматика, лексика, аудирование, говорение — обсудите с преподавателем ваши цели (работа, учеба, путешествия, саморазвитие) — протестируете интерактивную платформу Почему «Инглекс»? ✨15 лет на рынке, входит в ТОП-3 лидеров ✨средний стаж преподавателей — 10 лет ✨персонализированный подход: вас не заставят делать то, что не нужно для вашего уровня Никаких обещаний «заговорите за месяц». Только объективная диагностика и прозрачный план. Сделайте первый шаг, а после урока получите видеоурок по произношению в подарок. Узнать больше #реклама 16+ englex.ru О рекламодателе
317
20
Задача: 209. Minimum Size Subarray Sum Сложность: medium Дан массив положительных целых чисел nums и положительное целое число target. Верните минимальную длину подмассива, сумма которого больше или равна target. Если такого подмассива нет, верните 0. Пример: Input: target = 7, nums = [2,3,1,2,4,3] Output: 2 Explanation: The subarray [4,3] has the minimal length under the problem constraint. 👨‍💻 Алгоритм: 1️⃣Инициализация переменных: Создайте три целочисленные переменные left, right и sumOfCurrentWindow. Переменные left и right формируют подмассив, указывая на начальные и конечные индексы текущего подмассива (или окна), а sumOfCurrentWindow хранит сумму этого окна. Инициализируйте все их значением 0. Создайте еще одну переменную res для хранения ответа на задачу. Инициализируйте ее большим целым значением. 2️⃣Итерация по массиву: Итерируйте по массиву nums с помощью right, начиная с right = 0 до nums.length - 1, увеличивая right на 1 после каждой итерации. Выполняйте следующее внутри этой итерации: Добавьте элемент с индексом right к текущему окну, увеличив sumOfCurrentWindow на nums[right]. Проверьте, если sumOfCurrentWindow >= target. Если да, у нас есть подмассив, который удовлетворяет условию. В результате, попытайтесь обновить переменную ответа res длиной этого подмассива. Выполните res = min(res, right - left + 1). Затем удалите первый элемент из этого окна, уменьшив sumOfCurrentWindow на nums[left] и увеличив left на 1. Этот шаг повторяется во внутреннем цикле, пока sumOfCurrentWindow >= target. 3️⃣Возврат результата: Текущая сумма окна теперь меньше target. Нужно добавить больше элементов в окно. В результате, увеличивается right на 1. Верните res. 😎 Решение: class Solution { minSubArrayLen(target, nums) { let left = 0, sumOfCurrentWindow = 0; let res = Number.MAX_VALUE; for (let right = 0; right < nums.length; right++) { sumOfCurrentWindow += nums[right]; while (sumOfCurrentWindow >= target) { res = Math.min(res, right - left + 1); sumOfCurrentWindow -= nums[left]; left++; } } return res === Number.MAX_VALUE ? 0 : res; } } Ставь 👍 и забирай 📚 Базу знаний
391