uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

JavaScript

JavaScript

Відкрити в Telegram

Всё о JavaScript и frontend-разработке. Проверка своих знаний по языку JavaScript. Ссылка: @Portal_v_IT Сотрудничество: @oleginc,

Показати більше
2 399
Підписники
+124 години
-87 днів
-2830 днів
Архів дописів
Задача: 947. Most Stones Removed with Same Row or Column Сложность: medium Учитывая массив stones длины n, где stones[i] = [xi, yi] представляет местоположение i-го камня, верните наибольшее возможное количество камней, которые могут быть удалены. Пример: Input: stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]] Output: 5 👨‍💻 Алгоритм: 1⃣Представить каждую строку и столбец как узлы в графе. 2⃣Создать связи между узлами для камней, которые находятся в той же строке или столбце. Использовать алгоритм поиска в глубину (DFS) или объединение-поиска (Union-Find), чтобы найти компоненты связности. 3⃣Количество камней, которые могут быть удалены, это общее количество камней минус количество компонентов связности. 😎 Решение: var removeStones = function(stones) { const parent = {}; function find(x) { if (!(x in parent)) parent[x] = x; if (parent[x] !== x) parent[x] = find(parent[x]); return parent[x]; } function union(x, y) { parent[find(x)] = find(y); } for (const [x, y] of stones) { union(x, ~y); } const uniqueRoots = new Set(Object.keys(parent).map(find)); return stones.length - uniqueRoots.size; }; JavaScript // чат

Задача: 314. Binary Tree Vertical Order Traversal Сложность: medium Дан корень бинарного дерева, верните вертикальный порядок
Задача: 314. Binary Tree Vertical Order Traversal Сложность: medium Дан корень бинарного дерева, верните вертикальный порядок обхода значений его узлов (т.е. сверху вниз, столбец за столбцом). Если два узла находятся в одной строке и столбце, порядок должен быть слева направо. Пример: Input: root = [3,9,20,null,null,15,7] Output: [[9],[3,15],[20],[7]] 👨‍💻 Алгоритм: 1⃣Создайте хэш-таблицу с именем columnTable для отслеживания результатов. 2⃣Инициализируйте очередь, поместив в нее корневой узел вместе с его индексом столбца (0). Выполните обход в ширину (BFS), извлекая элементы из очереди. На каждой итерации извлекайте элемент, состоящий из узла и соответствующего индекса столбца. Если узел не пуст, добавьте его значение в columnTable. Затем поместите дочерние узлы с их индексами столбцов (т.е. column-1 и column+1) в очередь. 3⃣После завершения BFS обхода получите хэш-таблицу, содержащую значения узлов, сгруппированные по индексам столбцов. Для каждой группы значений отсортируйте их по индексам строк. Отс

👩‍💻 Всем программистам посвящается! Вот 14 авторских обучающих IT каналов по самым востребованным областям программирования: Выбирай своё направление: 👩‍💻 Python — t.me/python_ready 🤔 InfoSec & Хакинг — t.me/hacking_ready 🖥 SQL & Базы Данных — t.me/sql_ready 👩‍💻 IT Новости — t.me/it_ready 🤖 AI & ML — t.me/neuro_ready 👩‍💻 Frontend — t.me/frontend_ready 👩‍💻 C/C++ — https://t.me/cpp_ready 👩‍💻 C# & Unity — t.me/csharp_ready 👩‍💻 Linux — t.me/linux_ready 👩‍💻 Java — t.me/java_ready 📖 IT Книги — t.me/books_ready 📱 JavaScript — t.me/javascript_ready 🖼️ DevOps — t.me/devops_ready 🖥 Design —t.me/design_ready 📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!

Чем заменить Claude Code в России: китайские ИИ вместо западных сервисов Российским пользователям все чаще блокируют аккаунты
Чем заменить Claude Code в России: китайские ИИ вместо западных сервисов Российским пользователям все чаще блокируют аккаунты в западных ИИ-сервисах, возникают проблемы с оплатой, а привычные инструменты становятся менее доступными. Но это не повод отказываться от ИИ как рабочего инструмента. На бесплатном практикуме Кирилл Пшинник, CEO Университета Зерокодера, покажет, как работать с китайскими ИИ ZCode и DeepSeek Harness на практике: от создания сайтов до аналитики и автоматизации задач. Что ждет вас на практикуме? • Собрать дашборд с графиками и выводами из таблицы; • Создать лендинг с формой заявки по текстовому описанию; • Получить 3D-модель, просто описав объект словами; • Начать работать из России без блокировок и обходных путей. Также сравним китайские инструменты с Claude Code и Codex, разберем их возможности, ограничения и то, что действительно доступно бесплатно. Бонус: сборник из 30 идей для вайбкодинга, доступ к закрытой базе ИИ-решений и гайды по установке китайских ИИ из РФ. Бесплатная регистрация по ссылке.

Задача: 42. Trapping Rain Water Сложность: hard Дано n неотрицательных целых чисел, представляющих карту высот, где ширина ка
Задача: 42. Trapping Rain Water Сложность: hard Дано n неотрицательных целых чисел, представляющих карту высот, где ширина каждого столбца равна 1. Вычислите, сколько воды он может удержать после дождя. Пример: Input: height = [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6 👨‍💻 Алгоритм: 1️⃣Найдите максимальную высоту столбца с левого конца до индекса i в массиве left_max. 2️⃣Найдите максимальную высоту столбца с правого конца до индекса i в массиве right_max. 3️⃣Итерируйте по массиву высот height и обновляйте ans: добавьте min(left_max[i], right_max[i]) - height[i] к ans. 😎 Решение: var trap = function (height) { if (height.length == 0) return 0; let ans = 0; let size = height.length; let left_max = new Array(size).fill(0), right_max = new Array(size).fill(0); left_max[0] = height[0]; for (let i = 1; i < size; i++) { left_max[i] = Math.max(height[i], left_max[i - 1]); } right_max[size - 1] = height[size - 1]; for (let i = size - 2; i >= 0; i--) { right_m

Спиздила у @theaftertimes он разрешил! JavaScript // чат
Спиздила у @theaftertimes он разрешил! JavaScript // чат

Задача: 30. Substring with Concatenation of All Words Сложность: hard Дана строка s и массив строк words, где все слова одина
Задача: 30. Substring with Concatenation of All Words Сложность: hard Дана строка s и массив строк words, где все слова одинаковой длины. Нужно вернуть все начальные индексы подстрок в s, которые являются конкатенацией всех слов из массива words в любой перестановке. Слова не могут быть разделены, повторения допустимы. Пример: Input: s = "barfoothefoobarman", words = ["foo","bar"] Output: [0,9] 👨‍💻 Алгоритм: 1️⃣ Вычисляем: - len — длина одного слова - windowSize — общее число символов в одной перестановке всех слов - Если s.length < windowSize, возвращаем [] 2️⃣ Заполняем Map m, где ключ — слово из words, значение — количество его вхождений 3️⃣ Двигаемся по строке s посимвольно: - Для каждого индекса start проверяем, является ли подстрока от start длины windowSize валидной комбинацией слов из m - Для проверки используем isConcat() 😎 Решение: var findSubstring = function(s, words) { const len = words[0].length; const windowSize = words.length * len; if (s.length < wi

Начнем попозже закончим пораньше JavaScript // чат
Начнем попозже закончим пораньше JavaScript // чат

Треш каждый раз одно и то же JavaScript // чат
Треш каждый раз одно и то же JavaScript // чат

бизнестрендс — легендарный агрегатор всего, что происходит в бизнесе и маркетинге прямо сейчас. Оперативные новости, вдумчивая аналитика и щепотка мемчиков. Что задумал Альтман со своей OpenAI, когда грянет страшный кризис, расцветёт ли российская экономика, что на завтрак у Германа Грефа и какие приколы сейчас в почёте у СММщиков. Изнанку трендов и бизнеса транслируют тут: @business_trends

Задача: 730. Count Different Palindromic Subsequences Сложность: hard Поскольку ответ может быть очень большим, верните его по модулю 109 + 7. Подпоследовательность строки получается путем удаления из нее нуля или более символов. Последовательность является палиндромной, если она равна последовательности, обращенной назад. Две последовательности a1, a2, ... и b1, b2, ... различны, если существует некоторое i, для которого ai != bi. Пример: Input: s = "bccb" Output: 6 👨‍💻 Алгоритм: 1⃣Используйте динамическое программирование для подсчета количества палиндромных подпоследовательностей. 2⃣Введите двумерный массив dp, где dp[i][j] представляет количество палиндромных подпоследовательностей в подстроке от i до j. 3⃣Итерируйте по длине подстрок от 1 до длины строки и обновляйте значения в dp на основе состояния предыдущих подстрок. 😎 Решение: var countPalindromicSubsequences = function(s) { const MOD = 10**9 + 7; const n = s.length; const dp = Array.from({ length: n }, () => Array(n).fill(0)); for (let i = 0; i < n; i++) { dp[i][i] = 1; } for (let length = 2; length <= n; length++) { for (let i = 0; i <= n - length; i++) { const j = i + length - 1; if (s[i] === s[j]) { let l = i + 1, r = j - 1; while (l <= r && s[l] !== s[i]) l++; while (l <= r && s[r] !== s[j]) r--; if (l > r) { dp[i][j] = dp[i + 1][j - 1] * 2 + 2; } else if (l === r) { dp[i][j] = dp[i + 1][j - 1] * 2 + 1; } else { dp[i][j] = dp[i + 1][j - 1] * 2 - dp[l + 1][r - 1]; } } else { dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1]; } dp[i][j] = (dp[i][j] + MOD) % MOD; } } return dp[0][n - 1]; }; JavaScript // чат

Задача: 559. Maximum Depth of N-ary Tree Сложность: easy Дано n-арное дерево, найдите его максимальную глубину. Максимальная
Задача: 559. Maximum Depth of N-ary Tree Сложность: easy Дано n-арное дерево, найдите его максимальную глубину. Максимальная глубина - это количество узлов вдоль самого длинного пути от корневого узла до самого дальнего листового узла. Сериализация ввода n-арного дерева представлена в порядке уровня, каждая группа дочерних узлов разделена значением null (см. примеры). Пример: Input: root = [1,null,3,2,4,null,5,6] Output: 3 👨‍💻 Алгоритм: 1⃣Интуитивный подход заключается в решении задачи с помощью рекурсии. 2⃣Здесь мы демонстрируем пример с использованием стратегии поиска в глубину (DFS - Depth First Search). 3⃣Применяя DFS, проходим через все узлы дерева, вычисляя максимальную глубину. 😎 Решение: class Solution { maxDepth(root) { if (root === null) { return 0; } else if (root.children.length === 0) { return 1; } else { let heights = root.children.map(child => this.maxDepth(child)); return Math.max(...heights) + 1; }

Задача: 919. Complete Binary Tree Inserter Сложность: medium Полное двоичное дерево - это двоичное дерево, в котором каждый уровень, кроме, возможно, последнего, полностью заполнен, а все узлы расположены как можно дальше влево. Разработайте алгоритм вставки нового узла в полное двоичное дерево, сохраняя его полным после вставки. Реализуйте класс CBTInserter: CBTInserter(TreeNode root) Инициализирует структуру данных корнем полного бинарного дерева. int insert(int v) Вставляет TreeNode в дерево со значением Node.val == val так, что дерево остается полным, и возвращает значение родителя вставленного TreeNode. TreeNode get_root() Возвращает корневой узел дерева. Пример: Input ["CBTInserter", "insert", "insert", "get_root"] [[[1, 2]], [3], [4], []] Output [null, 1, 2, [1, 2, 3, 4]] 👨‍💻 Алгоритм: 1⃣Инициализация: Проход по дереву и добавление всех узлов в очередь, чтобы отслеживать узлы, у которых есть хотя бы одно пустое место для нового дочернего узла. 2⃣Вставка: Добавление нового узла в первое доступное место слева направо. 3⃣Возвращение корня: Просто возвращает корневой узел. 😎 Решение: class TreeNode { constructor(val = 0, left = null, right = null) { this.val = val; this.left = left; this.right = right; } } class CBTInserter { constructor(root) { this.root = root; this.deque = []; const queue = [root]; while (queue.length > 0) { const node = queue.shift(); if (!node.left || !node.right) { this.deque.push(node); } if (node.left) { queue.push(node.left); } if (node.right) { queue.push(node.right); } } } insert(v) { const node = this.deque[0]; const newNode = new TreeNode(v); if (!node.left) { node.left = newNode; } else { node.right = newNode; this.deque.shift(); } this.deque.push(newNode); return node.val; } get_root() { return this.root; } } JavaScript // чат