Java | LeetCode
Открыть в Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Вопросы собесов t.me/+7ESm0VKXC4tjYzky Вакансии t.me/+4pspF5nDjgM4MjQy
Больше6 656
Подписчики
-124 часа
-137 дней
-5130 день
Архив постов
6 656
#hard
Задача: 745. Prefix and Suffix Search
Создайте специальный словарь, в котором поиск слов осуществляется по префиксу и суффиксу. Реализуйте класс WordFilter: WordFilter(string[] words) Инициализирует объект со словами в словаре. f(string pref, string suff) Возвращает индекс слова в словаре, которое имеет префикс pref и суффикс suff. Если существует более одного допустимого индекса, возвращается наибольший из них. Если в словаре нет такого слова, возвращается -1.
Пример:
Input: letters = ["c","f","j"], target = "a" Output: "c"👨💻 Алгоритм: 1⃣Сохраните слова и их индексы в словаре. 2⃣Создайте объединенные ключи, состоящие из префиксов и суффиксов для всех возможных комбинаций. 3⃣Реализуйте функцию поиска, которая ищет наибольший индекс слова по префиксу и суффиксу. 😎 Решение:
public class WordFilter {
private Map<String, Integer> prefixSuffixMap = new HashMap<>();
public WordFilter(String[] words) {
for (int index = 0; index < words.length; index++) {
String word = words[index];
int length = word.length();
for (int prefixLength = 1; prefixLength <= length; prefixLength++) {
for (int suffixLength = 1; suffixLength <= length; suffixLength++) {
String prefix = word.substring(0, prefixLength);
String suffix = word.substring(length - suffixLength);
String key = prefix + "#" + suffix;
prefixSuffixMap.put(key, index);
}
}
}
}
public int f(String pref, String suff) {
String key = pref + "#" + suff;
return prefixSuffixMap.getOrDefault(key, -1);
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Ты готов к ИТ-собеседованию?
Бесплатный воркшоп 20 марта
Приглашаем айтишников на воркшоп "Искусство продавать себя или как подготовиться к собесу на все 100"
Рекрутер раскроет все карты! Записывайся на воркшоп, чтобы первым узнать:
— Как подготовиться к собеседованию
— Как презентовать свой опыт так, чтобы тебя запомнили
— Как проверяют hard skills и как к этому подготовиться
— Как произвести хорошее впечатление, запомниться рекрутеру и сделать так, чтобы захотели работать именно с тобой
Дата: 20 марта, 18:00
Где: Онлайн
Регистрируйся, чтобы получить полезные знания и быть готовым к следующему собеседованию на 100%
Зарегистрироваться
#реклама 16+
my.mts-link.ru
О рекламодателе
6 656
#easy
Задача: 744. Find Smallest Letter Greater Than Target
Нам дан массив символов letters, отсортированный в неубывающем порядке, и символ target. В массиве letters есть как минимум два разных символа. Возвращается наименьший символ в letters, который лексикографически больше target. Если такого символа не существует, возвращается первый символ в буквах.
Пример:
Input: letters = ["c","f","j"], target = "a" Output: "c"👨💻 Алгоритм: 1⃣Использовать бинарный поиск для нахождения позиции первого символа в letters, который лексикографически больше target. 2⃣Если найденный символ существует, вернуть его. 3⃣Если такого символа не существует, вернуть первый символ в letters. 😎 Решение:
public class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int left = 0, right = letters.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (letters[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return letters[left % letters.length];
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
#medium
Задача: 743. Network Delay Time
Дана сеть из узлов, помеченных от 1 до n. Также дано times - список времен прохождения сигнала в виде направленных ребер times[i] = (ui, vi, wi), где ui - исходный узел, vi - целевой узел, а wi - время прохождения сигнала от источника до цели. Мы пошлем сигнал из заданного узла k. Верните минимальное время, которое потребуется всем узлам, чтобы получить сигнал. Если все узлы не могут получить сигнал, верните -1.
Пример:
Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2 Output: 2👨💻 Алгоритм: 1⃣Представьте граф в виде списка смежности. 2⃣Используйте алгоритм Дейкстры для нахождения кратчайших путей от узла k до всех других узлов. 3⃣Найдите максимальное значение среди кратчайших путей к узлам. Если какой-либо узел недостижим, верните -1. 😎 Решение:
import java.util.*;
public class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
Map<Integer, List<int[]>> graph = new HashMap<>();
for (int i = 1; i <= n; i++) {
graph.put(i, new ArrayList<>());
}
for (int[] time : times) {
graph.get(time[0]).add(new int[]{time[1], time[2]});
}
PriorityQueue<int[]> minHeap = new PriorityQueue<>(Comparator.comparingInt(a -> a[0]));
minHeap.add(new int[]{0, k});
Map<Integer, Integer> minTime = new HashMap<>();
for (int i = 1; i <= n; i++) {
minTime.put(i, Integer.MAX_VALUE);
}
minTime.put(k, 0);
while (!minHeap.isEmpty()) {
int[] top = minHeap.poll();
int time = top[0];
int node = top[1];
for (int[] neighbor : graph.get(node)) {
int newTime = time + neighbor[1];
if (newTime < minTime.get(neighbor[0])) {
minTime.put(neighbor[0], newTime);
minHeap.add(new int[]{newTime, neighbor[0]});
}
}
}
int maxTime = Collections.max(minTime.values());
return maxTime == Integer.MAX_VALUE ? -1 : maxTime;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
#medium
Задача: 742. Closest Leaf in a Binary Tree
Если задан корень бинарного дерева, в котором каждый узел имеет уникальное значение, а также задано целое число k, верните значение ближайшего к цели k узла листа дерева. Ближайший к листу узел означает наименьшее количество ребер, пройденных бинарным деревом, чтобы достичь любого листа дерева. Кроме того, узел называется листом, если у него нет дочерних узлов.
Пример:
Input: root = [1,3,2], k = 1 Output: 2👨💻 Алгоритм: 1⃣Пройдите дерево, чтобы найти путь от корня до узла k и сохранить его в список. 2⃣Найдите все листья и минимальное расстояние до них, используя BFS, начиная с найденного узла k. 3⃣Верните значение ближайшего листа. 😎 Решение:
import java.util.*;
public class Solution {
public int findClosestLeaf(TreeNode root, int k) {
List<TreeNode> path = new ArrayList<>();
Map<TreeNode, Integer> leaves = new HashMap<>();
findPath(root, k, path);
findLeaves(root, leaves);
Queue<Pair<TreeNode, Integer>> queue = new LinkedList<>();
queue.add(new Pair<>(path.get(path.size() - 1), 0));
Set<TreeNode> visited = new HashSet<>();
while (!queue.isEmpty()) {
Pair<TreeNode, Integer> pair = queue.poll();
TreeNode node = pair.getKey();
int dist = pair.getValue();
if (leaves.containsKey(node)) return node.val;
visited.add(node);
if (node.left != null && !visited.contains(node.left)) queue.add(new Pair<>(node.left, dist + 1));
if (node.right != null && !visited.contains(node.right)) queue.add(new Pair<>(node.right, dist + 1));
if (path.size() > 1) queue.add(new Pair<>(path.remove(path.size() - 1), dist + 1));
}
return -1;
}
private boolean findPath(TreeNode node, int k, List<TreeNode> path) {
if (node == null) return false;
path.add(node);
if (node.val == k) return true;
if (findPath(node.left, k, path) || findPath(node.right, k, path)) return true;
path.remove(path.size() - 1);
return false;
}
private void findLeaves(TreeNode node, Map<TreeNode, Integer> leaves) {
if (node == null) return;
if (node.left == null && node.right == null) leaves.put(node, 0);
findLeaves(node.left, leaves);
findLeaves(node.right, leaves);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Разбуди в себе Python-программиста
Python-программирование стремительно набирает популярность благодаря своей универсальности и высокой востребованности на рынке труда. Стать Python-программистом — это ваш путь к стабильной и успешной карьере в сфере технологий.
Записывайтесь в лист ожидания и получите новую профессию в числе первых. Количество льготных мест ограничено, так что не упустите шанс изменить свою жизнь к лучшему.
Обучим бесплатно, если ты:
— В отпуске по уходу за ребёнком
— Неработающая мама детей до 7 лет
— Официально не работаешь или под риском увольнения
— 50 лет и старше или предпенсионер
— Находишься в поисках работы или хочешь повысить квалификацию на текущем рабочем месте
Подать заявку
#реклама 16+
osnovanie.info
О рекламодателе
6 656
#hard
Задача: 741. Cherry Pickup
Вам дана сетка n x n, представляющая поле вишен. Каждая клетка - одно из трех возможных целых чисел. 0 означает, что клетка пуста, и вы можете пройти через нее, 1 означает, что клетка содержит вишню, которую вы можете сорвать и пройти через нее, или -1 означает, что клетка содержит шип, который преграждает вам путь. Верните максимальное количество вишен, которое вы можете собрать, следуя следующим правилам: Начиная с позиции (0, 0) и достигая (n - 1, n - 1) путем перемещения вправо или вниз через допустимые клетки пути (клетки со значением 0 или 1).
После достижения (n - 1, n - 1) вернитесь в (0, 0), двигаясь влево или вверх по клеткам с действительными путями. Проходя через клетку пути, содержащую вишню, вы поднимаете ее, и клетка становится пустой клеткой 0. Если между (0, 0) и (n - 1, n - 1) нет действительного пути, то вишни собрать нельзя.
Пример:
Input: grid = [[0,1,-1],[1,0,-1],[1,1,1]] Output: 5👨💻 Алгоритм: 1⃣Используйте динамическое программирование для подсчета максимального количества вишен, которые можно собрать при движении от (0, 0) до (n - 1, n - 1). 2⃣Примените еще один проход с использованием динамического программирования для движения обратно от (n - 1, n - 1) до (0, 0), чтобы учитывать вишни, собранные на обратном пути. 3⃣Объедините результаты двух проходов, чтобы найти максимальное количество вишен, которые можно собрать. 😎 Решение:
public class Solution {
public int cherryPickup(int[][] grid) {
int n = grid.length;
int[][][] dp = new int[n][n][2 * n - 1];
for (int[][] layer : dp) {
for (int[] row : layer) {
Arrays.fill(row, Integer.MIN_VALUE);
}
}
dp[0][0][0] = grid[0][0];
for (int k = 1; k < 2 * n - 1; k++) {
for (int i1 = Math.max(0, k - n + 1); i1 <= Math.min(n - 1, k); i1++) {
for (int i2 = Math.max(0, k - n + 1); i2 <= Math.min(n - 1, k); i2++) {
int j1 = k - i1, j2 = k - i2;
if (j1 < n && j2 < n && grid[i1][j1] != -1 && grid[i2][j2] != -1) {
int maxCherries = Integer.MIN_VALUE;
if (i1 > 0 && i2 > 0) maxCherries = Math.max(maxCherries, dp[i1 - 1][i2 - 1][k - 1]);
if (i1 > 0) maxCherries = Math.max(maxCherries, dp[i1 - 1][i2][k - 1]);
if (i2 > 0) maxCherries = Math.max(maxCherries, dp[i1][i2 - 1][k - 1]);
maxCherries = Math.max(maxCherries, dp[i1][i2][k - 1]);
if (maxCherries != Integer.MIN_VALUE) {
dp[i1][i2][k] = maxCherries + grid[i1][j1];
if (i1 != i2) dp[i1][i2][k] += grid[i2][j2];
}
}
}
}
}
return Math.max(0, dp[n - 1][n - 1][2 * (n - 1)]);
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Почему SWG и NGFW должны работать вместе
NGFW — фундамент защиты сети. Но веб-трафик — сложная экосистема, где риски могут скрываться даже внутри разрешенных ресурсов. Чтобы увидеть больше, нужно заглянуть глубже. В этом поможет SWG-система.
Вместе NGFW и SWG смогут обеспечить максимальную безопасность корпоративной сети: NGFW — на периметре, а SWG — в веб-трафике.
Как грамотно построить комплексную защиту периметра сети, расскажут эксперты «Солара» на вебинаре «SWG и NGFW: почему вместе, а не вместо».
Вы узнаете:
- Какие задачи решает NGFW, а какие — SWG;
- Почему SWG — не просто «еще один фильтр», а необходимость;
- Как сбалансировать защиту без потерь в производительности.
Вас ждут реальные кейсы совместного использования NGFW и SWG в компаниях.
Регистрируйтесь, чтобы обеспечить защиту компании.
Зарегистрироваться
#реклама 16+
rt-solar.ru
О рекламодателе
6 656
#medium
Задача: 740. Delete and Earn
Вам дан целочисленный массив nums. Вы хотите максимизировать количество очков, выполнив следующую операцию любое количество раз: Выберите любой элемент nums[i] и удалите его, чтобы заработать nums[i] очков. После этого вы должны удалить каждый элемент, равный nums[i] - 1, и каждый элемент, равный nums[i] + 1. Верните максимальное количество очков, которое вы можете заработать, применив вышеуказанную операцию некоторое количество раз.
Пример:
Input: nums = [3,4,2] Output: 6👨💻 Алгоритм: 1⃣Подсчитайте количество каждого числа в массиве nums. 2⃣Используйте динамическое программирование для расчета максимальных очков, которые можно заработать, используя накопленный результат для чисел, меньших текущего. Добавьте текущий день в стек. 3⃣Для каждого числа num в nums, учитывайте два случая: не брать число или взять число и добавить его очки. 😎 Решение:
import java.util.*;
public class Solution {
public int deleteAndEarn(int[] nums) {
Map<Integer, Integer> count = new HashMap<>();
for (int num : nums) {
count.put(num, count.getOrDefault(num, 0) + 1);
}
int avoid = 0, using = 0, prev = -1;
for (int num : count.keySet().stream().sorted().mapToInt(Integer::intValue).toArray()) {
if (num - 1 != prev) {
int newAvoid = Math.max(avoid, using);
using = num * count.get(num) + Math.max(avoid, using);
avoid = newAvoid;
} else {
int newAvoid = Math.max(avoid, using);
using = num * count.get(num) + avoid;
avoid = newAvoid;
}
prev = num;
}
return Math.max(avoid, using);
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Крупнейший университет искусственного интеллекта
Учим использовать ChatGPT в профессиональных целях, создавать нейро-сотрудников и зарабатывать на искусственном интеллекте.
✨ 8 000+ студентов со всего мира
✨ 600+ AI-проектов, созданных студентами
✨ Сборная Университета — победители крупнейших AI-хакатонов России
✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие)
✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие)
Будем рады видеть тебя в наших рядах!
Узнать больше
#реклама 16+
neural-university.ru
О рекламодателе
6 656
#medium
Задача: 739. Daily Temperatures
Задав массив целых чисел temperature, представляющих дневные температуры, верните массив answer, такой, что answer[i] - это количество дней, которые нужно подождать после i-го дня, чтобы температура стала теплее. Если в будущем не существует дня, для которого это возможно, сохраните answer[i] == 0.
Пример:
Input: temperatures = [73,74,75,71,69,72,76,73] Output: [1,1,4,2,1,1,0,0]👨💻 Алгоритм: 1⃣Создайте стек для хранения индексов дней с температурами, для которых еще не найден более теплый день. 2⃣Пройдите по массиву температур и для каждого дня: Пока текущая температура больше температуры дня на вершине стека, обновляйте массив ответов и удаляйте вершину стека. Добавьте текущий день в стек. 3⃣Возвращайте массив ответов. 😎 Решение:
public class Solution {
public int[] dailyTemperatures(int[] T) {
int n = T.length;
int[] answer = new int[n];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < n; i++) {
while (!stack.isEmpty() && T[i] > T[stack.peek()]) {
int j = stack.pop();
answer[j] = i - j;
}
stack.push(i);
}
return answer;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
#medium
Задача: 738. Monotone Increasing Digits
Целое число имеет монотонно возрастающие цифры тогда и только тогда, когда каждая пара соседних цифр x и y удовлетворяет x <= y. Задав целое число n, верните наибольшее число, которое меньше или равно n с монотонно возрастающими цифрами.
Пример:
Input: n = 10 Output: 9👨💻 Алгоритм: 1⃣Преобразуйте число в строку для удобства обработки. 2⃣Найдите позицию, где последовательность перестает быть монотонной. 3⃣Уменьшите соответствующую цифру и установите все последующие цифры в 9. 😎 Решение:
public class Solution {
public int monotoneIncreasingDigits(int n) {
char[] digits = Integer.toString(n).toCharArray();
int mark = digits.length;
for (int i = digits.length - 1; i > 0; i--) {
if (digits[i] < digits[i - 1]) {
mark = i;
digits[i - 1]--;
}
}
for (int i = mark; i < digits.length; i++) {
digits[i] = '9';
}
return Integer.parseInt(new String(digits));
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Как успешно пройти backend собеседование и получить лучший оффер?
Нужно зазубрить методы класса Object, угождать HR и ванильно рассказывать о себе?
Нет!
Автор канала Backend Interviewer подготовил всё необходимое, чтобы ты "взломал" процесс собеседований.
Только реальная прокачка твоих hard и soft скиллов в сжатые сроки.
Только то, что реально требуется на собеседованиях без воды.
Подписывайся и кликай на закреп - там вся нужная инфа: @backend_interviewer
6 656
Узнайте, какая профессия в IT вам подходит. Бесплатно!
Пройдите тест на профессию и забирайте:
✅ Бесплатную карьерную консультацию с экспертом
✅ Доступ к чат-боту с гайдами по профессиям и заданиями для самопроверки
✅ Мини-курсы для погружения в IT и дизайн, чтобы точнее выбрать направление
✨130 000 человек уже прошли профтестирование и выбрали перспективную профессию в IT или дизайне
Пройдите тест за 5 минут!
Начать
#реклама 16+
free.skillfactory.ru
О рекламодателе
6 656
#medium
Задача: 737. Sentence Similarity II
Мы можем представить предложение в виде массива слов, например, предложение "I am happy with leetcode" можно представить как arr = ["I", "am",happy", "with", "leetcode"].
Даны два предложения sentence1 и sentence2, каждое из которых представлено в виде массива строк, и массив пар строк similarPairs, где similarPairs[i] = [xi, yi] указывает, что два слова xi и yi похожи. Возвращается true, если предложения sentence1 и sentence2 похожи, или false, если они не похожи. Два предложения похожи, если: у них одинаковая длина (т.е, Заметьте, что слово всегда похоже само на себя, также обратите внимание, что отношение сходства является транзитивным. Например, если слова a и b похожи, а слова b и c похожи, то a и c похожи.
Пример:
Input: sentence1 = ["great","acting","skills"], sentence2 = ["fine","drama","talent"], similarPairs = [["great","good"],["fine","good"],["drama","acting"],["skills","talent"]] Output: true👨💻 Алгоритм: 1⃣Проверить, одинаковой ли длины предложения sentence1 и sentence2. Если нет, вернуть false. 2⃣Построить граф схожести слов с использованием словаря. 3⃣Использовать поиск в глубину (DFS) для проверки транзитивной схожести слов в предложениях. 😎 Решение:
import java.util.*;
public class Solution {
public boolean areSentencesSimilar(String[] sentence1, String[] sentence2, List<List<String>> similarPairs) {
if (sentence1.length != sentence2.length) {
return false;
}
Map<String, List<String>> graph = new HashMap<>();
for (List<String> pair : similarPairs) {
graph.computeIfAbsent(pair.get(0), k -> new ArrayList<>()).add(pair.get(1));
graph.computeIfAbsent(pair.get(1), k -> new ArrayList<>()).add(pair.get(0));
}
for (int i = 0; i < sentence1.length; i++) {
if (!sentence1[i].equals(sentence2[i]) && !dfs(sentence1[i], sentence2[i], graph, new HashSet<>())) {
return false;
}
}
return true;
}
private boolean dfs(String word1, String word2, Map<String, List<String>> graph, Set<String> visited) {
if (word1.equals(word2)) {
return true;
}
visited.add(word1);
for (String neighbor : graph.getOrDefault(word1, Collections.emptyList())) {
if (!visited.contains(neighbor) && dfs(neighbor, word2, graph, visited)) {
return true;
}
}
return false;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Квартиры в Краснодаре от 3,52 млн. руб.
Новый жилой район комфорт+ класса "Первое место" в Краснодаре.
ПСК 6,299–23,008%
Действуют следующие акции:
- Ипотека от 4,6%
- Скидка 7% за покупку наличными
- Платеж от 16 863 руб/мес
Здесь всё для счастливой жизни на первом месте:
- Две школы
- Шесть детских садов
- Две поликлиники
- Собственный фитнес-центр
- Многоуровневый паркинг
Зафиксируйте выгодные условия прямо сейчас!
Получить консультацию
Изучите все условия кредита (займа) на сайте в соответствующем разделе. Оценивайте свои финансовые возможности и рискиПроектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО " СЗ Живые квартиры". Финансовые услуги оказывает: ПАО "Сбербанк России".
#реклама
promo.tochno-pervoe.ru
О рекламодателе
6 656
#hard
Задача: 736. Parse Lisp Expression
Нам дан массив asteroids, состоящий из целых чисел, представляющих астероиды в ряд. Для каждого астероида абсолютное значение обозначает его размер, а знак - направление движения (положительное - вправо, отрицательное - влево). Каждый астероид движется с одинаковой скоростью. Определите состояние астероидов после всех столкновений. Если два астероида столкнутся, меньший из них взорвется. Если оба одинакового размера, то взорвутся оба. Два астероида, движущиеся в одном направлении, никогда не встретятся.
Пример:
Input: expression = "(let x 2 (mult x (let x 3 y 4 (add x y))))" Output: 14👨💻 Алгоритм: 1⃣Определите функцию для оценки выражений. 2⃣Используйте рекурсивный подход для обработки различных типов выражений (let, add, mult, и переменных). 3⃣Используйте словарь для отслеживания значений переменных с учетом области видимости. 😎 Решение:
import java.util.*;
public class Solution {
public int evaluate(String expression) {
return evaluate(expression, new HashMap<>());
}
private int evaluate(String expression, Map<String, Integer> env) {
if (!expression.startsWith("(")) {
if (Character.isDigit(expression.charAt(0)) || expression.charAt(0) == '-') {
return Integer.parseInt(expression);
}
return env.get(expression);
}
List<String> tokens = tokenize(expression);
if (tokens.get(0).equals("let")) {
for (int i = 1; i < tokens.size() - 2; i += 2) {
env.put(tokens.get(i), evaluate(tokens.get(i + 1), env));
}
return evaluate(tokens.get(tokens.size() - 1), env);
} else if (tokens.get(0).equals("add")) {
return evaluate(tokens.get(1), env) + evaluate(tokens.get(2), env);
} else if (tokens.get(0).equals("mult")) {
return evaluate(tokens.get(1), env) * evaluate(tokens.get(2), env);
}
return 0;
}
private List<String> tokenize(String expression) {
List<String> tokens = new ArrayList<>();
StringBuilder token = new StringBuilder();
int parens = 0;
for (char c : expression.toCharArray()) {
if (c == '(') {
parens++;
if (parens == 1) continue;
} else if (c == ')') {
parens--;
if (parens == 0) {
tokens.addAll(tokenize(token.toString()));
token = new StringBuilder();
continue;
}
} else if (c == ' ' && parens == 1) {
if (token.length() > 0) {
tokens.add(token.toString());
token = new StringBuilder();
}
continue;
}
token.append(c);
}
if (token.length() > 0) {
tokens.add(token.toString());
}
return tokens;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Дарим подписку на Яндекс Музыку
Ответьте на 1 вопрос и Яндекс Музыка для вас и 3-х ваших близких 14 дней бесплатно.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте сейчас❤️
Попробовать
#реклама 18+
music.yandex.ru
О рекламодателе
Реклама на Яндексе
6 656
#medium
Задача: 735. Asteroid Collision
Нам дан массив asteroids, состоящий из целых чисел, представляющих астероиды в ряд. Для каждого астероида абсолютное значение обозначает его размер, а знак - направление движения (положительное - вправо, отрицательное - влево). Каждый астероид движется с одинаковой скоростью. Определите состояние астероидов после всех столкновений. Если два астероида столкнутся, меньший из них взорвется. Если оба одинакового размера, то взорвутся оба. Два астероида, движущиеся в одном направлении, никогда не встретятся.
Пример:
Input: sentence1 = ["great","acting","skills"], sentence2 = ["fine","drama","talent"], similarPairs = [["great","fine"],["drama","acting"],["skills","talent"]] Output: true👨💻 Алгоритм: 1⃣Используйте стек для отслеживания движущихся вправо астероидов. 2⃣Пройдите по массиву астероидов: Если астероид движется вправо, добавьте его в стек. Если астероид движется влево, сравните его с последним астероидом в стеке (если он есть и движется вправо): Если движущийся вправо астероид больше, текущий взорвется. Если движущийся влево астероид больше, последний астероид в стеке взорвется, и продолжите сравнение. Если они одинакового размера, оба взорвутся. 3⃣Добавьте оставшиеся астероиды из стека и текущий астероид в результат. 😎 Решение:
import java.util.*;
public class Solution {
public int[] asteroidCollision(int[] asteroids) {
Stack<Integer> stack = new Stack<>();
for (int asteroid : asteroids) {
boolean alive = true;
while (alive && asteroid < 0 && !stack.isEmpty() && stack.peek() > 0) {
int last = stack.pop();
if (last == -asteroid) {
alive = false;
} else if (last > -asteroid) {
stack.push(last);
alive = false;
}
}
if (alive) {
stack.push(asteroid);
}
}
int[] result = new int[stack.size()];
for (int i = result.length - 1; i >= 0; i--) {
result[i] = stack.pop();
}
return result;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 656
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
