Java Algorithms
111 subscribers
625 photos
623 links
Добро пожаловать💡

Канал для всех, кто ищет качественные решения и объяснения задач на Java

Roadmap по каналу:
https://t.me/algoroadmap/2
Download Telegram
🔴Hard
224. Basic Calculator

Company: 🏢🚖🖼

📝Дана строка s, представляющее выражение, состоящее из цифр и символов '+', '-', '(', ')', ' '.

Верните результат выражения

💡: при встрече оператора вычисляйте выражение слева и сохраняйте текущий знак в переменной, в стеке храните результат и знак выражения до скобки

#leetcode224 | #hard #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
23. Merge k Sorted Lists

Company: 🏢📱❤️

📝Вам дан массив k связанных списков lists, где каждый отсортирован в порядке возрастания.

Объедините все списки в один отсортированный и верните его

💡: соединяйте списки попарно с шагом, который постепенно увеличивается в 2 раза

#leetcode23 | #hard #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
25. Reverse Nodes in k-Group

Company: 🔍🅰️🚀

📝Дан односвязный список и целое число k. Требуется переворачивать список по группам из k узлов.

Если число узлов не кратно k, то оставшиеся узлы оставьте в том же порядке

💡: передвигайте указатель на k вперед для отделения группы узлов, после чего используйте алгоритм переворачивания

#leetcode25 | #hard #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
410. Split Array Largest Sum

Company: 📱🚔📱

📝Дан массив целых чисел nums и целое число k, разделите nums на k непустых подмассивов таким образом, чтобы наибольшая сумма любого подмассива была минимальной.

Верните минимальную наибольшую сумму разделения

💡: ищите минимальную сумму в диапазоне [max(nums), sum(nums)], при которой nums можно разбить на k подмассивов с суммой не больше этой величины

#leetcode410 | #hard #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
1231. Divide Chocolate

Company: 🔍

📝У вас есть плитка шоколада, представленная массивом sweetness, где каждый элемент — это уровень сладости одного кусочка.

Вы хотите поделить шоколад на k + 1 частей, разрезав плитку k раз, при этом вы забираете себе наименее сладкий из полученных кусков. Ваша цель — максимизировать сладость этой наименьшей части, которую вы себе оставите.

Найдите максимальную общую сладость кусочка, которую вы можете получить, оптимально разрезав плитку шоколада

💡: проверяйте, можно ли разбить массив так, чтобы каждая из k + 1 частей была хотя бы сладости mid из диапазона поиска [min(a), sum(a)]

#leetcode1231 | #hard #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
4. Median of Two Sorted Arrays

Company: 📱📱🔴

📝Даны два отсортированных массива nums1 и nums2 размером m и n соответственно, объедините их в один отсортированный массив и верните его медиану.

Напишите алгоритм со временем работы не хуже O(log (m+n))

💡: используя бинарный поиск по одному массиву, найдите такое количество элементов из него, которое вместе с дополняющим количеством из второго массива правильно формирует левую половину объединенных массивов

#leetcode4 | #hard #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
968. Binary Tree Cameras

Company: 🏢🚔📱

📝Дано двоичное дерево. Верните минимальное количество камер, необходимое для наблюдения за всеми узлами дерева.

Каждая камера на узле может контролировать своего родителя, себя и своих непосредственных потомков

💡: обходите дерево снизу вверх, присваивая каждому узлу состояние: требует камеру (-1), покрыт без камеры (0), содержит камеру (1)

#leetcode968 | #hard #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🔴Hard
272. Closest Binary Search Tree Value II

Company: 📱📱📱

📝 Дано двоичное дерево поиска (BST), значение target и целое число k.

Верните k значений в BST, которые наиболее близки к target. Вы можете вернуть ответ в любом порядке

💡: используйте in-order обход, а затем примените идею из данной задачи

#leetcode272 | #hard #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
297. Serialize and Deserialize Binary Tree

Company: 🚔📱📱

📝Разработайте алгоритм сериализации и десериализации бинарного дерева. Никаких ограничений на реализацию нет.

Вам просто нужно убедиться, что бинарное дерево может быть сериализовано в строку, а эта строка может быть десериализована в исходную структуру дерева.

Для решения реализуйте класс Codec:
public class Codec {

public String serialize(TreeNode root) {}

public TreeNode deserialize(String data) {}
}


💡: сериализуйте дерево, используя dfs и разделяя значения запятыми, а при десериализации рекурсивно восстанавливайте левое и правое поддеревья

#leetcode297 | #hard #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
1373. Maximum Sum BST in Binary Tree

Company: 📱📱🚖

📝Дано двоичное дерево, верните максимально возможную сумму всех узлов любого поддерева, которое является двоичным деревом поиска (BST)

💡: используйте обход dfs, возвращая структуру данных {sum, maxLeft, minRight}

#leetcode1373 | #hard #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
632. Smallest Range Covering Elements from K Lists

Company: 📕🏢✴️

📝Дано k списков целых чисел, отсортированных в неубывающем порядке. Найдите наименьший диапазон, включающий хотя бы одно число каждого из k списков.

Диапазон [a, b] меньше диапазона [c, d], если b - a < d - c или a < c если b - a == d - c

💡: используя очередь, передвигайте указатель в списке с наименьшим текущим элементом, чтобы пытаться сузить диапазон

#leetcode632 | #hard #priorityqueue
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
2402. Meeting Rooms III

Company: 📱🚖📕

📝Дано n комнат, пронумерованных от 0 до n - 1.

Вам дан массив meetings, где meetings[i] = [start_i, end_i) — время встречи в течение полузакрытого интервала. Все значения start уникальны.

Встречи распределяются по комнатам следующим образом:

каждая встреча будет проходить в неиспользуемой комнате с наименьшим номером
если свободных комнат нет, встреча будет отложена до тех пор, пока не освободится комната
если комната становится неиспользуемой, ее следует отдать отложенной встрече, начинавшейся раньше

Верните номер комнаты, в которой было больше всего встреч. Если ответов несколько, верните комнату с наименьшим номером

Объяснение для примеров:
Пример 1.
- В момент времени 0 обе комнаты не используются. Первая встреча начинается в комнате 0.
- В момент времени 1 не используется только комната 1. Вторая встреча начинается в комнате 1.
- В момент времени 2 используются обе комнаты. Третья встреча задерживается.
- В момент времени 3 используются обе комнаты. Четвертая встреча задерживается.
- В момент времени 5 заканчивается встреча в комнате 1. Третья встреча начинается в комнате 1 на период времени [5,10).
- В момент времени 10 заканчиваются встречи в обеих комнатах. Четвертая встреча начинается в комнате 0 на период времени [10,11).
В обеих комнатах 0 и 1 было проведено по 2 встречи, поэтому мы возвращаем 0.

Пример 2.
- В момент времени 1 все три комнаты не используются. Первая встреча начинается в комнате 0.
- В момент времени 2 комнаты 1 и 2 не используются. Вторая встреча начинается в комнате 1.
- В момент времени 3 не используется только комната 2. Третья встреча начинается в комнате 2.
- В момент времени 4 используются все три комнаты. Четвертая встреча задерживается.
- В момент времени 5 заканчивается встреча в комнате 2. Четвертая встреча начинается в комнате 2 на период времени [5,10).
- В момент времени 6 используются все три комнаты. Пятая встреча задерживается.
- В момент времени 10 заканчиваются встречи в комнатах 1 и 2. Пятая встреча начинается в комнате 1 на период времени [10,12).
В комнате 0 была проведена 1 встреча, а в комнатах 1 и 2 — по 2, поэтому мы возвращаем 1.
💡: используйте две очереди: первая отслеживает номера свободных комнат, вторая — время окончания проходящих встреч и комнату, в которой они находятся

#leetcode2402 | #hard #priorityqueue
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
295. Find Median from Data Stream

Company: 📕📱🚖

📝Реализуйте класс MedianFinder:

MedianFinder() инициализирует MedianFinder объект
void addNum(int num) добавляет целое число num из потока данных в структуру данных
double findMedian() возвращает медиану всех элементов на данный момент

Медиана — это среднее значение в упорядоченном целочисленном списке. Если размер списка четный, медиана — это среднее значение двух средних значений

💡: используйте две очереди — для левой и правой половины потока чисел

#leetcode295 | #hard #priorityqueue
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
51. N-Queens

Company: 🔍📕📱

📝Дано целое число n, найдите все различные решения головоломки с n ферзями.

Задача об n ферзях — это расстановка n ферзей на n x n шахматной доске таким образом, чтобы никакие два ферзя не атаковали друг друга.

Каждое решение должно содержать отдельную конфигурацию доски с размещением n ферзей, где 'Q' и '.' обозначают ферзя и пустое место соответственно

💡: используйте backtracking, ставя ферзя построчно и одновременно отслеживая занятые столбцы и диагонали

#leetcode51 | #hard #backtracking
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
679. 24 Game

Company: 🔍🚖📱

📝Дан массив целых чисел cards длиной 4, где каждая карта содержит число от 1 до 9.

Вам нужно составить из чисел на этих карточках математическое выражение, используя операторы ['+', '-', '*', '/'] и скобки (), чтобы получить значение 24.

При этом действуют следующие правила:

Оператор деления '/ 'представляет собой действительное деление, а не целочисленное
Например, 4 / (1 - 2 / 3) = 4 / (1 / 3) = 12

Каждая операция применяется только между двумя числами (унарные минусы запрещены)
Числа нельзя объединять
Например, если cards = [1, 2, 1, 2], то выражение "12 + 12" недопустимо


Верните true, если возможно получить выражение, равное 24

💡: попробуйте перебрать все пары чисел и заменить их результатом арифметической операции, рекурсивно сводя задачу к одному числу

#leetcode679 | #hard #backtracking
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴Hard
37. Sudoku Solver

Company: 🔍📕📱

📝Напишите алгоритм, который решает головоломку Судоку, заполняя все пустые клетки.

Игровое поле представлено в виде двумерного массива символов, где каждая клетка содержит либо цифру '1'–'9', либо символ '.', обозначающий пустую клетку.

Условия решения:
В каждой строке — все цифры 1–9 без повторов
В каждом столбце — все цифры 1–9 без повторов
В каждом блоке 3×3 — все цифры 1–9 без повторов

💡: при размещении числа, сразу исключайте его из строки, столбца и блока, чтобы сократить поиск

#leetcode37 | #hard #backtracking
Please open Telegram to view this post
VIEW IN TELEGRAM