uz
Feedback
JavaScript | LeetCode

JavaScript | LeetCode

Kanalga Telegram’da o‘tish
8 772
Obunachilar
-624 soatlar
-187 kunlar
-8530 kunlar
Obunachilarni jalb qilish
Iyun '26
Iyun '26
+19
1 kanalda
May '26
+32
0 kanalda
Get PRO
Aprel '26
+47
0 kanalda
Get PRO
Mart '26
+26
0 kanalda
Get PRO
Fevral '26
+38
0 kanalda
Get PRO
Yanvar '26
+48
0 kanalda
Get PRO
Dekabr '25
+39
1 kanalda
Get PRO
Noyabr '25
+161
0 kanalda
Get PRO
Oktabr '25
+173
0 kanalda
Get PRO
Sentabr '25
+129
0 kanalda
Get PRO
Avgust '25
+165
0 kanalda
Get PRO
Iyul '25
+175
1 kanalda
Get PRO
Iyun '25
+173
2 kanalda
Get PRO
May '25
+204
2 kanalda
Get PRO
Aprel '25
+356
0 kanalda
Get PRO
Mart '25
+320
5 kanalda
Get PRO
Fevral '25
+439
5 kanalda
Get PRO
Yanvar '25
+534
53 kanalda
Get PRO
Dekabr '24
+232
0 kanalda
Get PRO
Noyabr '24
+292
0 kanalda
Get PRO
Oktabr '24
+681
17 kanalda
Get PRO
Sentabr '24
+2 356
332 kanalda
Get PRO
Avgust '24
+464
0 kanalda
Get PRO
Iyul '24
+2 250
219 kanalda
Get PRO
Iyun '24
+3 130
234 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
10 Iyun0
09 Iyun+1
08 Iyun+2
07 Iyun+2
06 Iyun+1
05 Iyun0
04 Iyun+2
03 Iyun+3
02 Iyun+7
01 Iyun+1
Kanal postlari
Онлайн-магистратура для IT: ИТМО, МИФИ + Яндекс Программы онлайн-магистратуры ИТМО и МИФИ в партнёрстве с Яндексом. Актуальные знания, практическое обучение и гибкий график. Учитесь, совмещая с работой. Доступна господдержка оплаты, отсрочка от армии Перейти на сайт #реклама 16+ practicum.yandex.ru О рекламодателе

2
Задача: 470. Implement Rand10() Using Rand7() Сложность: medium Дано API rand7(), которое генерирует случайное целое число в
Задача: 470. Implement Rand10() Using Rand7() Сложность: medium Дано API rand7(), которое генерирует случайное целое число в диапазоне [1, 7]. Напишите функцию rand10(), которая генерирует случайное целое число в диапазоне [1, 10]. Вы можете вызывать только API rand7(), и не должны вызывать другие API. Пожалуйста, не используйте встроенные в язык функции для генерации случайных чисел. Каждый тестовый случай будет содержать один внутренний аргумент n, который указывает количество вызовов вашей реализованной функции rand10() во время тестирования. Обратите внимание, что это не аргумент, передаваемый в rand10(). Пример: Input: n = 1 Output: [2] 😎 Решение: var rand10 = function() { let row, col, idx; do { row = rand7(); col = rand7(); idx = col + (row - 1) * 7; } while (idx > 40); return 1 + (idx - 1) % 10; }; Ставь 👍 и забирай 📚 Базу знаний
270
3
Бесплатный курс: веб-дизайн, графика, интерфейсы Научись создавать дизайн сайтов и приложений, инфографику для карточек на ма
Бесплатный курс: веб-дизайн, графика, интерфейсы Научись создавать дизайн сайтов и приложений, инфографику для карточек на маркетплейсах и работать в Figma! Студенты курса в среднем зарабатывают от 68 000 ₽ уже во время обучения💰 Этот курс для тебя, если ты: ✅ мечтаешь о новой профессии, но не знаешь, с чего начать; ✅ чувствуешь, что хочешь большего — свободы, самореализации, творчества; ✅ полный новичок и хочешь систему, а не хаос; ✅ хочешь начать зарабатывать удалённо. Зарегистрироваться #реклама 16+ ydaev.ru О рекламодателе
345
4
Задача: 959. Regions Cut By Slashes Сложность: medium n x n сетка состоит из квадратов размером 1 x 1, где каждый квадрат 1 x 1 содержит '/', '', или пустое пространство ' '. Эти символы делят квадрат на смежные области. Дана сетка grid, представленная в виде строкового массива. Верните количество областей. Обратите внимание, что обратные слеши экранированы, поэтому '' представлен как '\'. Пример: Input: grid = [" /","/ "] Output: 2 👨‍💻 Алгоритм: 1⃣Создайте 4*N*N узлов для каждой ячейки сетки и соедините их в соответствии с описанием. 2⃣Используйте структуру объединения-поиска (DSU), чтобы найти количество связанных компонентов. 3⃣Пройдите по всем узлам и посчитайте количество корневых узлов, которые представляют количество областей. 😎 Решение: class DSU { constructor(N) { this.parent = Array.from({ length: N }, (_, i) => i); } find(x) { if (this.parent[x] !== x) { this.parent[x] = this.find(this.parent[x]); } return this.parent[x]; } union(x, y) { this.parent[this.find(x)] = this.find(y); } } var regionsBySlashes = function(grid) { const N = grid.length; const dsu = new DSU(4 * N * N); for (let r = 0; r < N; r++) { for (let c = 0; c < N; c++) { const root = 4 * (r * N + c); const val = grid[r][c]; if (val !== '\\') { dsu.union(root + 0, root + 1); dsu.union(root + 2, root + 3); } if (val !== '/') { dsu.union(root + 0, root + 2); dsu.union(root + 1, root + 3); } if (r + 1 < N) { dsu.union(root + 3, (root + 4 * N) + 0); } if (r - 1 >= 0) { dsu.union(root + 0, (root - 4 * N) + 3); } if (c + 1 < N) { dsu.union(root + 2, (root + 4) + 1); } if (c - 1 >= 0) { dsu.union(root + 1, (root - 4) + 2); } } } let ans = 0; for (let x = 0; x < 4 * N * N; x++) { if (dsu.find(x) === x) { ans++; } } return ans; }; овых Ставь 👍 и забирай 📚 Базу знаний
273
5
Легендарная AIшница 4.0! Бесплатный онлайн-практикум «AIшница 4.0» — четвёртый сезон онлайн-практикума о нейросетях для бизне
Легендарная AIшница 4.0! Бесплатный онлайн-практикум «AIшница 4.0» — четвёртый сезон онлайн-практикума о нейросетях для бизнеса. С 23 по 25 июня покажем, как AI-агенты и вайбкодинг помогают автоматизировать процессы, оптимизировать задачи и запускать продукты без навыков программирования. Что вас ждёт: ✅ Тренды ИИ 2026 — узнаете актуальные возможности нейросетей для бизнеса. ✅ Мастер-классы на эфирах — разберём реальные кейсы и покажем настройку инструментов. ✅ AI-агенты — как внедрить их в процессы, чтобы сократить рутину. ✅ Вайбкодинг — создание продуктов и автоматизация без кода. Присоединяйтесь: 3 дня практики. Онлайн. Бесплатно. Подробная информация и регистрация — на сайте. Зарегистрироваться #реклама 16+ business2026.ru О рекламодателе
375
6
Задача: 722. Remove Comments Сложность: medium Дана программа на C++, удалите из нее комментарии. Исходный текст программы представляет собой массив строк source, где source[i] - это i-я строка исходного кода. Это результат разбиения исходной строки исходного кода символом новой строки '\n'. В C++ существует два типа комментариев: строчные и блочные. Строка "//" обозначает строчный комментарий, который означает, что он и остальные символы справа от него в той же строке должны игнорироваться. Строка "/*" обозначает блочный комментарий, который означает, что все символы до следующего (не перекрывающегося) вхождения "*/" должны игнорироваться. (Здесь вхождения происходят в порядке чтения: строка за строкой слева направо.) Чтобы было понятно, строка "/*/" еще не завершает блочный комментарий, так как окончание будет перекрывать начало. Первый эффективный комментарий имеет приоритет над остальными. Например, если строка "//" встречается в блочном комментарии, она игнорируется. Аналогично, если строка "/*" встречается в строчном или блочном комментарии, она также игнорируется. Если после удаления комментариев определенная строка кода оказывается пустой, вы не должны выводить эту строку: каждая строка в списке ответов будет непустой. Пример: Input: source = ["/*Test program */", "int main()", "{ ", " // variable declaration ", "int a, b, c;", "/* This is a test", " multiline ", " comment for ", " testing */", "a = b + c;", "}"] Output: ["int main()","{ "," ","int a, b, c;","a = b + c;","}"] 👨‍💻 Алгоритм: 1⃣Создайте строку buffer для хранения текущей строки кода без комментариев и флаг inBlock для отслеживания, находимся ли мы внутри блочного комментария. 2⃣Пройдите по каждой строке source и по каждому символу в этой строке, обрабатывая комментарии: Если встречен блочный комментарий /*, установите флаг inBlock и пропустите символы до */. Если встречен строчный комментарий //, прекратите обработку текущей строки. Если не находимся внутри комментария, добавьте символ в buffer. 3⃣После обработки всех строк добавьте непустые строки из buffer в результат. 😎 Решение: var removeComments = function(source) { let inBlock = false; let buffer = []; let result = []; for (let line of source) { let i = 0; if (!inBlock) buffer = []; while (i < line.length) { if (!inBlock && i + 1 < line.length && line[i] === '/' && line[i + 1] === '*') { inBlock = true; i += 1; } else if (inBlock && i + 1 < line.length && line[i] === '*' && line[i + 1] === '/') { inBlock = false; i += 1; } else if (!inBlock && i + 1 < line.length && line[i] === '/' && line[i + 1] === '/') { break; } else if (!inBlock) { buffer.push(line[i]); } i += 1; } if (buffer.length && !inBlock) { result.push(buffer.join('')); } } return result; }; Ставь 👍 и забирай 📚 Базу знаний
327
7
Задача: 659. Split Array into Consecutive Subsequences Сложность: medium Вам дан отсортированный в неубывающем порядке массив целых чисел nums. Определите, можно ли разделить nums на одну или несколько подпоследовательностей так, чтобы выполнялись оба следующих условия: Каждая подпоследовательность является последовательностью последовательных возрастающих чисел (то есть каждое целое число на 1 больше предыдущего). Все подпоследовательности имеют длину 3 или более. Верните true, если можно разделить nums согласно вышеуказанным условиям, или false в противном случае. Подпоследовательность массива — это новый массив, который формируется из исходного массива путем удаления некоторых (может быть, ни одного) элементов без нарушения относительных позиций оставшихся элементов. (например, [1,3,5] является подпоследовательностью [1,2,3,4,5], тогда как [1,3,2] не является). Пример: Input: nums = [1,2,3,3,4,5] Output: true 👨‍💻 Алгоритм: 1⃣Подсчет частоты элементов: Создайте хеш-таблицу для подсчета количества вхождений каждого элемента в массиве nums. 2⃣Создание подпоследовательностей: Создайте хеш-таблицу для отслеживания количества подпоследовательностей, которые могут быть продолжены для каждого элемента. Пройдите по каждому элементу в массиве и выполните следующие действия: Если элемент можно добавить к существующей подпоследовательности (проверяя хеш-таблицу подпоследовательностей), добавьте его и обновите хеш-таблицу. Если элемент нельзя добавить к существующей подпоследовательности, начните новую последовательность длиной 3 или более элементов. Если ни одно из условий не выполнено, верните false. 3⃣Проверка результата: Верните true, если все элементы успешно распределены по подпоследовательностям. 😎 Решение: var isPossible = function(nums) { let freq = new Map(); let need = new Map(); for (let num of nums) { freq.set(num, (freq.get(num) || 0) + 1); } for (let num of nums) { if (freq.get(num) === 0) { continue; } if (need.get(num) > 0) { need.set(num, need.get(num) - 1); need.set(num + 1, (need.get(num + 1) || 0) + 1); } else if (freq.get(num + 1) > 0 && freq.get(num + 2) > 0) { freq.set(num + 1, freq.get(num + 1) - 1); freq.set(num + 2, freq.get(num + 2) - 1); need.set(num + 3, (need.get(num + 3) || 0) + 1); } else { return false; } freq.set(num, freq.get(num) - 1); } return true; }; Ставь 👍 и забирай 📚 Базу знаний
336
8
Разработка без команды: ИИ Claude Code вместо 5 человек Покажем как собрать ИИ-команду с нейросетью Claude Code в прямом эфир
Разработка без команды: ИИ Claude Code вместо 5 человек Покажем как собрать ИИ-команду с нейросетью Claude Code в прямом эфире Узнать больше #реклама 16+ zerocoder.ru О рекламодателе
404
9
Задача: 1428. Leftmost Column with at Least a One Сложность: medium Строково-отсортированная бинарная матрица означает, что все элементы равны 0 или 1, и каждая строка матрицы отсортирована в неубывающем порядке. Дана строково-отсортированная бинарная матрица binaryMatrix, верните индекс (начиная с 0) самого левого столбца, содержащего 1. Если такого индекса не существует, верните -1. Вы не можете напрямую обращаться к бинарной матрице. Вы можете получить доступ к матрице только через интерфейс BinaryMatrix: - BinaryMatrix.get(row, col) возвращает элемент матрицы с индексом (row, col) (начиная с 0). - BinaryMatrix.dimensions() возвращает размеры матрицы в виде списка из 2 элементов [rows, cols], что означает, что матрица имеет размер rows x cols. Отправки, делающие более 1000 вызовов к BinaryMatrix.get, будут оценены как неправильный ответ. Кроме того, любые решения, пытающиеся обойти проверку, будут дисквалифицированы. Для пользовательского тестирования вводом будет вся бинарная матрица mat. Вы не будете иметь прямого доступа к бинарной матрице. Пример: Input: mat = [[0,0],[0,1]] Output: 1 👨‍💻 Алгоритм: 1⃣Инициализируйте указатели на текущую строку и столбец, начиная с верхнего правого угла матрицы. 2⃣Повторяйте поиск до тех пор, пока указатели не выйдут за границы матрицы: Если текущий элемент равен 0, сдвигайте указатель строки вниз. Если текущий элемент равен 1, сдвигайте указатель столбца влево. 3⃣Если указатель столбца остается на последнем столбце, значит, все элементы матрицы равны 0, и верните -1. В противном случае верните индекс самого левого столбца с 1. 😎 Решение: var leftMostColumnWithOne = function(binaryMatrix) { const [rows, cols] = binaryMatrix.dimensions(); let currentRow = 0, currentCol = cols - 1; while (currentRow < rows && currentCol >= 0) { if (binaryMatrix.get(currentRow, currentCol) === 0) { currentRow++; } else { currentCol--; } } return (currentCol === cols - 1) ? -1 : currentCol + 1; }; Ставь 👍 и забирай 📚 Базу знаний
458
10
Задача: 984. String Without AAA or BBB Сложность: medium Даны два целых числа a и b, верните любую строку s, такую что: s имеет длину a + b и содержит ровно a букв 'a' и ровно b букв 'b'. Подстрока 'aaa' не встречается в s. Подстрока 'bbb' не встречается в s. Пример: Input: a = 4, b = 1 Output: "aabaa" 👨‍💻 Алгоритм: 1⃣Инициализация переменных: Завести пустую строку s и переменные a_count и b_count для отслеживания оставшихся 'a' и 'b' соответственно. 2⃣Создание строки: Добавляйте символы в строку s, попеременно добавляя 'a' и 'b', чтобы избегать подстрок 'aaa' и 'bbb'. Если в строке подряд уже два символа 'a' и осталось ещё 'b', добавьте 'b' и наоборот. Если оба символа возможны для добавления, выбирайте тот, которого осталось больше. 3⃣Добавление оставшихся символов: После основной логики добавления символов, добавьте оставшиеся 'a' или 'b' в конец строки, если они остались. 😎 Решение: var strWithout3a3b = function(a, b) { let result = []; while (a > 0 || b > 0) { if (result.length >= 2 && result[result.length - 1] === result[result.length - 2]) { if (result[result.length - 1] === 'a') { result.push('b'); b--; } else { result.push('a'); a--; } } else { if (a >= b) { result.push('a'); a--; } else { result.push('b'); b--; } } } return result.join(''); }; Ставь 👍 и забирай 📚 Базу знаний
407
11
Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и н
Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и нейросеть. Всё привычно и удобно. Начните работать на бесплатном тарифе уже сейчас. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе
331
12
День сурка frontend-разработчика Зарплата стоит, скучные задачи день за днем, календарь забит созвонами, которые не влияют во
День сурка frontend-разработчика Зарплата стоит, скучные задачи день за днем, календарь забит созвонами, которые не влияют вообще ни на что. Откликаешься на вакансии, а в ответ тишина либо какие-то мутные конторы. На собесах вместо нормальной оценки навыков цирк с алгоритмами на скорость, как будто ты на олимпиаде, а не работу ищешь. И самое неприятное, пока ты варишься в этом болоте, кто-то спокойно проходит собесы и уходит в Яндекс, VK или на хорошую Валютную удаленку без лишней драмы. Есть классные проекты и сильные команды, где разработчиков действительно ценят, дают расти, поддерживают развитие и платят достойно и ты можешь туда попасть! 👋 Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Я за руку довожу до оффера на хорошую позицию в Big Tech и сопровождаю на испытательном сроке. Также из учеников я собираю комьюнити, где уже более 220 frontend-разработчиков🫂 А в своем канале: 👉Объясняю, как проходить HR-фильтр и превращать отклики в реальные приглашения 👉Помогаю найти мотивацию, борюсь убеждениями, которые мешают развиваться 👉На примерах объясняю, как проходить собеседования, включая техничку 👉Разбираю резюме и делюсь лайфхаками, например как аккуратно “пинговать” рекрутеров А еще регулярно публикую полезные материалы: ▪️Задачи, на которых валяться кандидаты ▪️База по микрофронтам ▪️Подборка из 100+ каналов с вакансиями для разработчиков ▪️100 вопросов, которые точно помогут тебе на собеседовании ▪️Чек лист проверки своего резюме А еще у меня множество успешных кейсов и отзывов, найти их можно в канале. Реклама, erid: 2W5zFJ8k6oT ИП Галактионов Тихон Витальевич, ИНН 771618975809
407
13
Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по
Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по тематикам и регионам • Умный подбор каналов • Гибкие модели оплаты (CPC и CPV) Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе
404
14
Задача: 246. Strobogrammatic Number Сложность: easy Дана строка num, представляющая собой целое число. Верните true, если num является стробограмматическим числом. Стробограмматическое число — это число, которое выглядит одинаково при повороте на 180 градусов (если посмотреть вверх ногами). Пример: Input: num = "69" Output: true 👨‍💻 Алгоритм: 1️⃣Создайте новую строку, перебирая оригинальную строку num в обратном порядке. Для каждого символа проверьте, является ли он допустимым для поворота (0, 1, 6, 8, 9). Если символ недопустим (2, 3, 4, 5, 7), немедленно верните false. 2️⃣Для каждого допустимого символа добавьте его соответствующее значение после поворота (0 ⟶ 0, 1 ⟶ 1, 6 ⟶ 9, 8 ⟶ 8, 9 ⟶ 6) в новую строку. 3️⃣Сравните полученную строку с исходной строкой num. Если они равны, верните true, в противном случае верните false. 😎 Решение: class Solution { isStrobogrammatic(num) { let rotated = ""; for (let i = num.length - 1; i >= 0; i--) { const c = num[i]; if (c === '0' || c === '1' || c === '8') { rotated += c; } else if (c === '6') { rotated += '9'; } else if (c === '9') { rotated += '6'; } else { return false; } } return num === rotated; } } Ставь 👍 и забирай 📚 Базу знаний
495
15
Задача: 1213. Intersection of Three Sorted Arrays Сложность: easy Даны три целочисленных массива arr1, arr2 и arr3, отсортированных в строго возрастающем порядке. Верните отсортированный массив, содержащий только те целые числа, которые присутствуют во всех трех массивах. Пример: Input: arr1 = [1,2,3,4,5], arr2 = [1,2,5,7,9], arr3 = [1,3,4,5,8] Output: [1,5] Explanation: Only 1 and 5 appeared in the three arrays. 👨‍💻 Алгоритм: 1⃣Инициализируйте counter как TreeMap для записи чисел, которые появляются в трех массивах, и количество их появлений. 2⃣Пройдитесь по массивам arr1, arr2 и arr3, чтобы посчитать частоты появления элементов. 3⃣Итерация через counter, чтобы найти числа, которые появляются три раза, и вернуть их в виде отсортированного массива. 😎 Решение: class Solution { arraysIntersection(arr1, arr2, arr3) { const counter = new Map(); for (const e of arr1) counter.set(e, (counter.get(e) || 0) + 1); for (const e of arr2) counter.set(e, (counter.get(e) || 0) + 1); for (const e of arr3) counter.set(e, (counter.get(e) || 0) + 1); const ans = []; for (const [key, value] of counter) { if (value === 3) ans.push(key); } return ans; } } Ставь 👍 и забирай 📚 Базу знаний
490
16
Офисы класса А в 100 метрах от метро «Новопеределкино» Проект расположен на западе Москвы, всего в 3 минутах от метро, рядом+3
Офисы класса А в 100 метрах от метро «Новопеределкино» Проект расположен на западе Москвы, всего в 3 минутах от метро, рядом с Ульяновским лесопарком и ключевыми магистралями запада Москвы — Боровским, Киевским и Можайским шоссе. До аэропорта Внуково — 10 минут. В проекте - офисы от 45 до 877 м² с гибкими планировочными решениями, панорамным остеклением и лаконичной архитектурой. На территории кластера — мультиарена, рестораны и кафе, формирующие полноценную среду для работы и встреч. Стартовые цены - от 13,7 млн ₽ Получите презентацию проекта, актуальные цены и условия покупки, оставив заявку на сайте! Перейти на сайт Финансовые услуги оказывает: АО «Альфа-банк». Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО "СЗ "РОДИНА ПЕРЕДЕЛКИНО". #реклама rodina-peredelkino.ru О рекламодателе
433
17
Задача: 729. My Calendar I Сложность: medium Вы создаете программу для использования в качестве календаря. Мы можем добавить новое событие, если его добавление не приведет к двойному бронированию. Двойное бронирование происходит, когда два события имеют некоторое непустое пересечение (т.е, Событие можно представить в виде пары целых чисел start и end, которая представляет собой бронирование на полуоткрытом интервале [start, end), диапазоне вещественных чисел x таких, что start <= x < end. Реализация класса MyCalendar: MyCalendar() Инициализирует объект календаря. boolean book(int start, int end) Возвращает true, если событие может быть успешно добавлено в календарь, не вызывая двойного бронирования. В противном случае возвращается false и событие не добавляется в календарь. Пример: Input ["MyCalendar", "book", "book", "book"] [[], [10, 20], [15, 25], [20, 30]] Output [null, true, false, true] 👨‍💻 Алгоритм: 1⃣Создайте класс MyCalendar с инициализатором для хранения списка событий. 2⃣Реализуйте метод book(int start, int end) для проверки пересечения нового события с уже существующими событиями. 3⃣Если новое событие не пересекается с существующими событиями, добавьте его в список событий и верните true. В противном случае верните false. 😎 Решение: class MyCalendar { constructor() { this.events = []; } book(start, end) { for (let [s, e] of this.events) { if (start < e && end > s) { return false; } } this.events.push([start, end]); return true; } } Ставь 👍 и забирай 📚 Базу знаний
569
18
Аренда VPS/VDS-сервера. Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес.
Аренда VPS/VDS-сервера. Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес. Преимущества аренды: - Выделенные ресурсы без переплаты; - KVM-виртуализация; - Быстрые NVMe SSD; - Соответствие 152-ФЗ, PCI DSS; - Бесплатная защита от DDoS; - Управление через панель, API и Terraform; - Техподдержка 24/7. Запустите сервер за несколько минут! Попробовать #реклама 16+ selectel.ru О рекламодателе
405
19
Задача: 167. Two Sum II - Input Array Is Sorted Сложность: medium Дан массив целых чисел numbers, индексированный с 1, который уже отсортирован в неубывающем порядке. Найдите два числа так, чтобы их сумма составляла заданное целевое число. Пусть эти два числа будут numbers[index1] и numbers[index2], где 1 <= index1 < index2 <= numbers.length. Верните индексы этих двух чисел, index1 и index2, увеличенные на один, в виде массива из двух элементов [index1, index2]. Тесты генерируются таким образом, что существует ровно одно решение. Нельзя использовать один и тот же элемент дважды. Ваше решение должно использовать только константное дополнительное пространство. Пример: Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2]. 👨‍💻 Алгоритм: 1️⃣Инициализация указателей: Используйте два указателя: один (left) начинается с начала массива, а другой (right) - с конца. 2️⃣Поиск решения: Сравните сумму элементов, на которые указывают left и right, с целевым значением target. Если сумма равна target, верните индексы этих элементов как решение. Если сумма меньше target, увеличьте left (так как массив отсортирован и увеличение left увеличивает сумму). Если сумма больше target, уменьшите right (чтобы уменьшить сумму). 3️⃣Продолжение до нахождения решения: Перемещайте указатели left и right, повторяя сравнение, пока не будет найдено решение. Учитывая, что задача гарантирует существование ровно одного решения, этот метод всегда найдет ответ. 😎 Решение: var twoSum = function (numbers, target) { let low = 0; let high = numbers.length - 1; while (low < high) { let sum = numbers[low] + numbers[high]; if (sum == target) { return [low + 1, high + 1]; } else if (sum < target) { low++; } else { high--; } } return [-1, -1]; }; Ставь 👍 и забирай 📚 Базу знаний
479
20
Задача: 1028. Recover a Tree From Preorder Traversal Сложность: hard Мы запускаем предварительный поиск в глубину (DFS) на корне двоичного дерева. На каждый узел в этом обходе мы выводим D тире (где D - глубина этого узла), а затем выводим значение этого узла.Если глубина узла равна D, то глубина его ближайшего потомка равна D + 1.Глубина корневого узла равна 0. Если у узла есть только один ребенок, то этот ребенок гарантированно является левым ребенком. Учитывая выходной обход этого обхода, восстановите дерево и верните его корень. Пример: Input: traversal = "1-2--3--4-5--6--7" Output: [1,2,5,3,4,6,7] 👨‍💻 Алгоритм: 1⃣Разбор строки: Пройдите по строке, чтобы определить уровни узлов и их значения. Используйте два счетчика: один для отслеживания текущего уровня (количество тире), второй для значения узла. 2⃣Создание узлов: Создайте новые узлы на основе уровня и значения из строки. Для каждого нового узла найдите его родительский узел из стека и добавьте узел как левого или правого ребенка. 3⃣Построение дерева: Используйте стек для отслеживания текущих узлов на каждом уровне глубины. Когда узел создан, добавьте его в стек. Если узел завершен, уберите его из стека. 😎 Решение: class TreeNode { constructor(val = 0, left = null, right = null) { this.val = val; this.left = left; this.right = right; } } class Solution { recoverFromPreorder(S) { const stack = []; let i = 0; while (i < S.length) { let level = 0; while (i < S.length && S[i] === '-') { level++; i++; } let value = 0; while (i < S.length && !isNaN(S[i])) { value = value * 10 + parseInt(S[i], 10); i++; } const node = new TreeNode(value); if (level === stack.length) { if (stack.length > 0) { stack[stack.length - 1].left = node; } } else { while (level !== stack.length) { stack.pop(); } stack[stack.length - 1].right = node; } stack.push(node); } while (stack.length > 1) { stack.pop(); } return stack[0]; } } Ставь 👍 и забирай 📚 Базу знаний
457