Full stack dev
61 subscribers
356 photos
50 videos
4 files
99 links
"Full Stack Dev & Computer Science" – Канал для разработчиков, которые хотят
расширить свои знания в Full Stack и углубиться в основы и новейшие тренды Computer Science.
Здесь вы найдете материалы по frontend и backend разработке, работе с базами данных,
Download Telegram
Реализация структуры данных "Дерево(Tree)" на Java

⚙️Короток о структуре:

Структура данных "Дерево(Tree)" - это структура данных
себе содержит значение value например = 1 и левый(
left)
и правый(
right) ноды(node/branch) по сути value может быть
любым типом данных, но для простоты примера взял
int,
left и right это тоже структура данных Tree которая тоже имеет
left и right узлы, но node left и right могут содержать в себе так
же
null, это означает конец ветки дерева. Картинка как это можно представить выше
вместе с кодом.


💡Итак всё начинается с корневой(root) node,
мы в коде создали обЪект TreeRoot и хранится он у нас
в переменной root, и заполнили его узлами(nodes),
на картинки всё наглядно, потом чтобы всё дерево
отрисовать в консоли для этого вызвали метод
printTree(
<корневая нода>,
<просто дополнительная срока>,
<мы отрисовываем дерево с лева на право по этой причине right это
конец отрисовки узла, а значит true это у нас right, а left это false>,
)
.

#algorithms #java
🟢Реализация Графа (Graph) на Java (Pt 1)

Что такое Граф(Graph) ?

📚Давайте начнём с того, что граф - это структура данных
которая является множество обЪектов называемые Узлами(Node), которые могут быть
соединены между собой с помощью Рёбер(Edge), на картинки видно наглядно.


#algorithms #java
🟢Реализация Графа (Graph) на Java (Pt 2)

Какие свойства есть у Графа(Graph) ?

📚Как мы выяснили ранее, граф состоит из Рёбер(Edge) и Узлами(Node),
их можно представить в виде двух мерного массива int[][] но это не эффективно,
По этой причине в основе понимания Графа(Graph), стоит понимать такие структуры данных
как Деревья(Tree), Хэш таблицы(HashMap), Связанный списки и ещё не из структур данных Рекурсии. Если эти
структуры данных вам понятны, значит и эта структура будет понятно.


💡Окей. Давайте разберём Graph на составные, а именно Edge и Node.
Node - это обЪект имеющий свойства
* value(может быть любым типом данных)
* edges(все узлы которые есть у node)
* parents(все вершины которые ведут к текущей node, то есть родители node )

Edge - это обЪект имеющий свойства
* adjacentNode - соседний узел
* weight - вес ребра(Каждое ребро имеет вес, в нашем примере для простоты все веса всех ребер равны 1)

#algorithms #java
🟢Реализация Графа(Graph) на Java (Pt 3)

Что такое Ребро(Edge) ?

💡Окей. Мы с вами уже разобрали какими свойствами обладаем граф,
теперь поговорим в отдельности о
Edge.

Edge - это ребро как мы уже поняли, каждое ребро имеет вес и направление,
есть ребра однонаправленные например:
Node -Edge--> Node; и
двунаправленные например:
Node <--Edge--> Node

⚙️Поговорим теперь о коде:
Edge - это класс имеющий в себе поля adjacentNode
указывающий на node и weight это вес самого узла.

Что такое Узел(Node) ?

💡Окей. Давай теперь поговорим о node(Узел).
Node является соединяющей частью Ребер(Edge).
Node часто имеет знамение(value), хранящие любой
тип данных который нам нужен. Так же мы
имеем LinkedHashSet<Edge> который хранит в себе все Edges.
И LinkedHashMap<Node, Edge> которая хранит в себе
key: Node; value: Edge.


#algorithms #java
Forwarded from Timur
Задача для « searchMatrix » Java

У нас есть method searchMatrix(), в качестве параметров принимаем int[][] matrix и
int target: searchMatrix(int[][] matrix, int target).
Нужно найти число
target в matrix, при этом у нас по m, n matrix отсортированы по
возрастанию. И в итоги вернуть
return (boolean) если есть число в matrix то true,
иначе
false.

👁‍🗨Пример №1:
« new int[][] {
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}
}
, 5

» true

👁‍🗨Пример №2:
« new int[][] {
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}
}
, 100

» false

💡Решение:
В начел идёт проверка матрицы, если проверка не прошла
успешно return false. Инициализируем m, n, i, j.
m - длина row, n - длина col. i, j - это указатели.
Обход начинаем с верхнего правого угла и до конца matrix.
По этой причине мы будем если matrix[i][j] > target то j-- иначе i++ .



📉Сложность алгоритма в решении:

⌚️Время: O(m + n)
💾Память: O(1)

#task #java
Forwarded from Timur
Задача «Add Digits»

📚Дано целое число num, многократно складывайте все его цифры,
пока в результате не останется только одна цифра, и верните ее.


👁‍🗨Пример 1:
« num = 38
» 2

👁‍🗨Пример 2:
« num = 1701
» 9

💡Решение:
В решении используется чистая математика,
и скажу честно я не смог решить это задачу
за O(1) самостоятельно. Меня довольно сильно удивило
такое короткое и лаконичное решение задачи,
хотя казалось бы что надо использовать цикл/рекурсию
для решения(что я по началу и сделал ) но понял что сложность
алгоритма в таком случаи было бы O(n) или что ещё хуже O(n**2).
В задачи было сказано что её можно решить за O(1), что меня естественно удивило.
И про гуглив решение нашёл как решить эту задачу за время O(1).


📉Сложность:
⌚️Время: O(1)
💾Память: O(1)

#algorithms #java
Forwarded from Timur
Микросервисы на Java: практическое руководство

📚В статье дается практическое руководство по разработке микросервисов на Java, начиная с базовых принципов и архитектуры.

📗Автор объясняет, как правильно разделять приложение на сервисы, организовывать их взаимодействие и тестирование, а также рассматривает ключевые инструменты и подходы к развертыванию.

📰Читать: тут

#articles #backend #java
Forwarded from Timur
Задача для Java

📚У нас есть метод twoSum(int[] nums, int target) и массив int[] nums, числа
в нем рассортированы по возрастанию.
Нужно найти 2 числа, которые в сумме дают
int target и return new int[]{ num1, num2 },
если не нашлось ответа, то
return new int[]{0}

👁‍🗨Пример №1:
« nums = new int[]{-3, 0, 1, 3, 4}, target = 5
» [1, 4]

👁‍🗨Пример №2:
« nums = new int[]{1, 2, 3, 4, 5}, target = 9
» [4, 5]

👁‍🗨Пример №3:
« nums = new int[]{-5, -3, -1, 0, 1, 3, 5}, target = -8
» [-5, -3]

👁‍🗨Пример №4:
« nums = new int[]{1, 2, 3, 4, 5}, target = 50
» [0]

💡Решение:
Я использовал при решении задачи алгоритм двух указателей.


📉Сложность алгоритма:
⌚️Время: O(n)
💾Память: O(1)


#task #java
Forwarded from Timur
Задача для Java «Valid Anagram»

⚙️Даны две строки s и t, верните true,
если
t является анаграммой s, и false
в противном случае.


👁‍🗨Пример 1:
« s = "anagram", t = "nagaram"
» true

👁‍🗨Пример 2:
« s = "rat", t = "car"
» false

Как работает решение:
Первым действием мы проверяем если s or t будут
пустыми мы возвращаем false, так же проверяем чтобы
длина s.length() and t.length были равны, иначе будем возвращать
false. Дальше мы работаем с типами, а именно конвертируем String to char[],
чтобы можно было следующим действием отсортировать оба char[], что
является ещё одним действием. И в конце мы сравниваем два массива.


Почему такая сложность:
Время: конвертация String to char[] даёт сложность O(n).
Сортировка стоит O(log n). И в сумме получаем O(n log n).

Память: из-за хранения массивов для строк. В итоги O(n)


📉Сложность алгоритма в решении:

⌚️Время: O(n log n)
💡Память: O(n)

#task #java
Forwarded from Timur
Задача для Java:

📚Создайте функцию, которая возвращает
сумму двух наименьших положительных
чисел, заданных в массиве минимум из 4
положительных целых чисел. Никакие числа
с плавающей точкой или неположительные целые
числа передаваться не будут.


👁‍🗨Пример:

« [19, 5, 42, 2, 77]
» 7

« [10, 343445353, 3453445, 3453545353453]
» 3453455

#task #java
Задача на Java

📚Условие задачи: дан массив астероидов (каждое значение - вес астероида, а знак - направление движения). Каждый из астероидов двигается с одинаковой скоростью.

⚙️При столкновени двух астероидов, асторид с меньшим весов уничтожается (у целого астероида вес остается неизменным после столкновения).

🖨Вывести надо результирующий массив после всевозможных столкновений.

📑Пример:

Ввод: asteroids = [5,10,-5]
Вывод: [5,10]
Объяснение: 3-ий астероид сталкивается со 2-ым и уничтожается.

Ввод: asteroids = [8,-8]
Вывод: [ ]


#task #java
👍1
Forwarded from Timur
Задача для Java «Maximum Swap»

📚Дано целое число num. Вы можете поменять в нём местами
две цифры один раз, чтобы получить максимальное значение.


⚙️Нужно вернуть максимальное значение, которое вы можете получить.

👁‍🗨Пример №1:
« 2736
» 7236
💡Пояснение: Поменяли 2 и 7 местами.

👁‍🗨Пример №2:
« 9973
» 9973
💡Пояснение: Ничего местами не поменяли.

👁‍🗨Пример №3:
« 1234567
» 7234561
💡Пояснение: Все цифры поменяли.

#task #java
Forwarded from Timur
Задача по Java: Удаление дубликатов из списка с сохранением порядка

📚Напишите метод removeDuplicates, который принимает список строк и
возвращает новый список, содержащий только уникальные
строки, сохраняя их порядок появления.


👁‍🗨Пример №1:
« List.of("apple", "banana", "apple", "orange", "banana")
» [apple, banana, orange]

👁‍🗨Пример №2:
« List.of("Timur", "Alex", "Max", "Alex", "Max")
» [Timur, Alex, Max]

👁‍🗨Пример №3:
» List.of("JS","Java", "JS", "JS", "Python")
« [JS, Java, Python]

#task #java
Задача Java:

📚Ваша задача - создать функцию,
которая может принимать любое
неотрицательное целое число в качестве
аргумента и возвращать его с цифрами в
порядке убывания. По сути, переставьте
цифры, чтобы получить максимально возможное
число.


⚙️Пример:

« 42145
» 54421
—————
« 145263
» 654321


#task #java
Кодирование и декодирование списка строк

📚Условие:
Необходимо разработать алгоритм кодирования
списка строк в одну строку
. Закодированная
строка будет отправлена по сети и затем декодирована
обратно в исходный список строк.
Необходимо реализовать функции encode и decode.

👁‍🗨Примеры:

⚙️Пример №1
« ["apple", "banana", "cherry"]

​» "a4b6c5applebananacherry"


⚙️Пример №2
« ["cat", "dog", "bird", "fish"]

​» "c3d3b4f4catdogbirdfish"


#task #java