и посмотреть медиа
JavaScript | LeetCode
и посмотреть медиа
LeetCode задачи и решения на JavaScript. Идеально для подготовки к собеседованиям и улучшения навыков алгоритмов.
LeetCode задачи и решения на JavaScript. Идеально для подготовки к собеседованиям и улучшения навыков алгоритмов.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Канал посвящен решениям задач LeetCode на JavaScript. Здесь собраны примеры кода для популярных алгоритмических задач, которые часто встречаются на собеседованиях. Материалы помогут освоить структуры данных, сортировки, динамическое программирование и другие ключевые темы. Подходит для junior и middle разработчиков, желающих прокачать навыки.
🔴 Тестовое собеседование на Frontend-разработчика со старшим разработчиком ex. Сбер 3 сентября(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика. Как это будет: 📂 Даниил Дмитриев, старший разработчик в R-Vision, ex. Сбер, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даниил будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Даниилу Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot Реклама. О рекламодателе.
Открыть канал и посмотреть медиаЗадача: 1262. Greatest Sum Divisible by Three Сложность: medium Если задан целочисленный массив nums, верните максимально возможную сумму элементов массива, которая делится на три. Пример: Input: nums = [3,6,5,1,8] Output: 18 👨💻 Алгоритм: 1⃣Найдите сумму всех элементов массива. 2⃣Если сумма делится на 3, то она и есть ответ. 3⃣Если сумма при делении на 3 дает остаток 1, удалите один элемент с остатком 1 или два элемента с остатком 2 (если их сумма равна 2). Если сумма при делении на 3 дает остаток 2, удалите один элемент с остатком 2 или два элемента с остатком 1 (если их сумма равна 2). 😎 Решение: import java.util.Arrays; public class Solution { public int maxSumDivThree(int[] nums) { int totalSum = Arrays.stream(nums).sum(); if (totalSum % 3 == 0) { return totalSum; } int mod1Min = Integer.MAX_VALUE; int mod2Min = Integer.MAX_VALUE; int[] mod1Min2 = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE}; int[] mod2Min2 = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE}; for (int num : nums) { if (num % 3 == 1) { if (num < mod1Min2[1]) { mod1Min2[1] = num; Arrays.sort(mod1Min2); } } else if (num % 3 == 2) { if (num < mod2Min2[1]) { mod2Min2[1] = num; Arrays.sort(mod2Min2); } } } int result = 0; if (totalSum % 3 == 1) { result = totalSum - mod1Min2[0]; if (mod2Min2[0] != Integer.MAX_VALUE && mod2Min2[1] != Integer.MAX_VALUE) { result = Math.max(result, totalSum - mod2Min2[0] - mod2Min2[1]); } } else if (totalSum % 3 == 2) { result = totalSum - mod2Min2[0]; if (mod1Min2[0] != Integer.MAX_VALUE && mod1Min2[1] != Integer.MAX_VALUE) { result = Math.max(result, totalSum - mod1Min2[0] - mod1Min2[1]); } } return result; } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаЗадача: 1243. Array Transformation Сложность: easy Если задан исходный массив arr, то каждый день вы создаете новый массив, используя массив предыдущего дня. В i-й день вы выполняете следующие операции над массивом дня i-1, чтобы получить массив дня i: если элемент меньше своего левого и правого соседа, то этот элемент увеличивается. Если элемент больше своего левого и правого соседа, то этот элемент уменьшается. Первый и последний элементы никогда не меняются. Через несколько дней массив не меняется. Верните этот окончательный массив. Пример: Input: arr = [6,2,3,4] Output: [6,3,3,4] 👨💻 Алгоритм: 1⃣Инициализация нового массива с такими же значениями, как у исходного массива. Циклически изменяем массив в соответствии с правилами, пока он не перестанет меняться. 2⃣Для каждого элемента массива проверяем, изменяется ли он в зависимости от его левого и правого соседей. Если элемент меньше своего левого и правого соседей, увеличиваем его. Если элемент больше своего левого и правого соседей, уменьшаем его. 3⃣Первый и последний элементы массива остаются неизменными. 😎 Решение: var transformArray = function(arr) { let changed; do { changed = false; let newArr = arr.slice(); for (let i = 1; i < arr.length - 1; i++) { if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) { newArr[i]++; changed = true; } else if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) { newArr[i]--; changed = true; } } arr = newArr; } while (changed); return arr; }; Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаЗадача: 652. Find Duplicate Subtrees Сложность: medium Если задан корень бинарного дерева, верните все дублирующие поддеревья. Для каждого вида дублирующих поддеревьев достаточно вернуть корневой узел любого из них. Два дерева являются дублирующими, если они имеют одинаковую структуру с одинаковыми значениями узлов. Пример: Input: root = [1,2,3,4,null,2,4,null,null,4] Output: [[2,4],[4]] 👨💻 Алгоритм: 1⃣Выполните обход дерева и используйте сериализацию для представления каждого поддерева. 2⃣Храните все сериализованные представления поддеревьев в хэш-таблице и отслеживайте частоту их появления. 3⃣Найдите поддеревья, которые появляются более одного раза, и верните корневые узлы этих поддеревьев. 😎 Решение: function TreeNode(val, left, right) { this.val = (val===undefined ? 0 : val) this.left = (left===undefined ? null : left) this.right = (right===undefined ? null : right) } var findDuplicateSubtrees = function(root) { const count = new Map(); const result = []; const serialize = (node) => { if (!node) return "#"; const serial = `${node.val},${serialize(node.left)},${serialize(node.right)}`; count.set(serial, (count.get(serial) || 0) + 1); if (count.get(serial) === 2) { result.push(node); } return serial; }; serialize(root); return result; }; Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаЗадача: 1006. Clumsy Factorial Сложность: medium Факториал целого положительного числа n - это произведение всех целых положительных чисел, меньших или равных n. Например, факториал(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1. Мы составляем неуклюжий факториал, используя целые числа в порядке убывания, заменяя операции умножения на фиксированную последовательность операций с умножением "*", делением "/", сложением "+" и вычитанием "-" в этом порядке. Например, clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1. Однако эти операции по-прежнему применяются с использованием обычного порядка операций арифметики. Мы выполняем все шаги умножения и деления перед шагами сложения и вычитания, а шаги умножения и деления выполняются слева направо. Кроме того, деление, которое мы используем, является делением с полом, так что 10 * 9 / 8 = 90 / 8 = 11. Учитывая целое число n, верните неуклюжий факториал n. Пример: Input: nums = [4,2,3], k = 1 Output: 5 👨💻 Алгоритм: 1⃣Инициализация переменных и обработка первых трех чисел: Создайте переменные для хранения результата и текущего значения. Если n меньше или равен 3, обработайте случай отдельно, выполняя операции в порядке убывания, и верните результат. 2⃣Выполнение операций в цикле: Создайте цикл, который будет обрабатывать числа от n до 1 в порядке убывания. В цикле выполняйте операции *, /, +, и - последовательно. Обновляйте текущий результат на каждом шаге в зависимости от остатка от деления текущего индекса на 4. 3⃣Учет оставшихся операций и возврат результата: После завершения цикла добавьте или вычтите оставшиеся числа (если есть) к результату. Верните окончательный результат. 😎 Решение: class Solution { clumsy(n) { if (n == 0) return 0; if (n == 1) return 1; if (n == 2) return 2 * 1; if (n == 3) return 3 * 2 / 1; let res = n * (n - 1) / (n - 2); n -= 3; if (n > 0) res += n--; while (n > 0) { res -= n * (n - 1) / (n - 2); n -= 3; if (n > 0) res += n--; } return res; } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаЗадача: 305. Number of Islands II Сложность: hard Дан пустой двумерный бинарный массив grid размером m x n. Этот массив представляет собой карту, где 0 означает воду, а 1 — сушу. Изначально все ячейки массива — водные (т.е. все ячейки содержат 0). Вы можете выполнить операцию "добавить землю", которая превращает воду в указанной позиции в сушу. Вам дан массив positions, где positions[i] = [ri, ci] — позиция (ri, ci), в которой следует выполнить i-ю операцию. Верните массив целых чисел answer, где answer[i] — количество островов после превращения ячейки (ri, ci) в сушу. Остров окружен водой и образуется путем соединения соседних земель по горизонтали или вертикали. Вы можете считать, что все четыре края сетки окружены водой. Пример: Input: m = 1, n = 1, positions = [[0,0]] Output: [1] 👨💻 Алгоритм: 1⃣Инициализация: Создайте массивы x[] = { -1, 1, 0, 0 } и y[] = { 0, 0, -1, 1 }, которые будут использоваться для нахождения соседей ячейки. Создайте экземпляр UnionFind, например, dsu(m * n). Инициализируйте всех родителей значением -1. Используйте объединение по рангу, инициализируйте все ранги значением 0. Наконец, инициализируйте count = 0. Создайте список целых чисел answer, где answer[i] будет хранить количество островов, образованных после превращения ячейки positions[i] в сушу. 2⃣Обработка позиций: Итерация по массиву positions. Для каждой позиции в positions: Выполните линейное отображение, чтобы преобразовать двумерную позицию ячейки в landPosition = position[0] * n + position[1]. Используйте операцию addLand(landPosition), чтобы добавить landPosition как узел в граф. Эта функция также увеличит count. Итерация по каждому соседу позиции. Соседа можно определить с помощью neighborX = position[0] + x[i] и neighborY = position[1] + y[i], где neighborX — координата X, а neighborY — координата Y соседней ячейки. Выполните линейное отображение соседней ячейки с помощью neighborPosition = neighborX * n + neighborY. Теперь, если на neighborPosition есть суша, т.е. isLand(neighborPosition) возвращает true, выполните объединение neighborPosition и landPosition. В объединении уменьшите count на 1. 3⃣Определение количества островов: Выполните операцию numberOfIslands, которая возвращает количество островов, образованных после превращения позиции в сушу. Добавьте это значение в answer. Верните answer. 😎 Решение class UnionFind { constructor(size) { this.parent = Array(size).fill(-1); this.rank = Array(size).fill(0); this.count = 0 } addLand(x) { if (this.parent[x] < 0) { this.parent[x] = x; this.count++ } } isLand(x) { return this.parent[x] >= 0 } find(x) { if (this.parent[x] !== x) this.parent[x] = this.find(this.parent[x]); return this.parent[x] } unionSet(x, y) { let xset = this.find(x), yset = this.find(y) if (xset !== yset) { if (this.rank[xset] < this.rank[yset]) this.parent[xset] = yset else { this.parent[yset] = xset; if (this.rank[xset] === this.rank[yset]) this.rank[xset]++ }; this.count-- } } } var numIslands2 = function(m, n, positions) { let dsu = new UnionFind(m * n), dirs = [[-1, 0], [1, 0], [0, -1], [0, 1]], answer = [] for (let pos of positions) { let land = pos[0] * n + pos[1]; dsu.addLand(land) for (let [dx, dy] of dirs) { let nx = pos[0] + dx, ny = pos[1] + dy, neighbor = nx * n + ny if (nx >= 0 && nx < m && ny >= 0 && ny < n && dsu.isLand(neighbor)) dsu.unionSet(land, neighbor) } answer.push(dsu.count) } return answer } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!
Archivos ZIPfiles: sonidos, diseño, fuentes y gráficos en movimiento.
Alertas de futuros en tiempo real nBinance: volumen, precio, liquidaciones, informes de ejercicios.
Señales para FOREX y GOLD XAUUSD. Soporte de intercambio superior: Binance. Bybit. KuCoin y otros.