C/C++ | LeetCode
Открыть в Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+zYofcX2VLTM3MGMy Вопросы собесов t.me/+BTbqlW1VbIFmYmVi Вакансии t.me/+za2mJYs4riAzMzFi
Больше3 255
Подписчики
+124 часа
+17 дней
-830 день
Архив постов
3 255
Задача: 918. Maximum Sum Circular Subarray
Сложность: medium
Если задан круговой целочисленный массив nums длины n, верните максимально возможную сумму непустого подмассива nums. Круговой массив означает, что конец массива соединяется с его началом. Формально, следующий элемент nums[i] равен nums[(i + 1) % n], а предыдущий элемент nums[i] равен nums[(i - 1 + n) % n]. Подмассив может включать каждый элемент фиксированного буфера nums не более одного раза. Формально, для подмассива nums[i], nums[i + 1], ..., nums[j] не существует i <= k1, k2 <= j, при этом k1 % n == k2 % n.
Пример:
Input: nums = [1,-2,3,-2] Output: 3👨💻 Алгоритм: 1⃣Найти стандартную максимальную сумму подмассива с помощью алгоритма Кадане. 2⃣Найти минимальную сумму подмассива с помощью алгоритма Кадане и вычесть ее из общей суммы массива. 3⃣Вернуть максимум между стандартной максимальной суммой подмассива и общей суммой массива минус минимальную сумму подмассива, если результат не равен 0 (чтобы учесть случай, когда все числа отрицательные). 😎 Решение:
class Solution {
public:
int maxSubarraySumCircular(vector<int>& nums) {
int kadane(vector<int>& arr) {
int currentSum = arr[0], maxSum = arr[0];
for (int i = 1; i < arr.size(); ++i) {
currentSum = max(arr[i], currentSum + arr[i]);
maxSum = max(maxSum, currentSum);
}
return maxSum;
}
int maxKadane = kadane(nums);
int totalSum = accumulate(nums.begin(), nums.end(), 0);
for (int& num : nums) num = -num;
int minKadane = kadane(nums);
return max(maxKadane, totalSum + minKadane == 0 ? maxKadane : totalSum + minKadane);
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
Задача: 974. Subarray Sums Divisible by K
Сложность: medium
Дан целочисленный массив nums и целое число k. Верните количество непустых подмассивов, сумма которых делится на k.
Подмассив — это непрерывная часть массива.
Пример:
Input: nums = [4,5,0,-2,-3,1], k = 5 Output: 7 Explanation: There are 7 subarrays with a sum divisible by k = 5: [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]👨💻 Алгоритм: 1⃣Инициализация и подготовка. Инициализируйте prefixMod = 0 для хранения остатка от суммы элементов до текущего индекса при делении на k. Инициализируйте result = 0 для хранения количества подмассивов, сумма которых делится на k. Инициализируйте массив modGroups длиной k, где modGroups[R] хранит количество подмассивов с остатком R. Установите modGroups[0] = 1. 2⃣Итерирование по массиву. Для каждого элемента массива nums вычислите новый prefixMod как (prefixMod + nums[i] % k + k) % k, чтобы избежать отрицательных значений. Увеличьте result на значение modGroups[prefixMod], чтобы добавить количество подмассивов с текущим остатком. Увеличьте значение modGroups[prefixMod] на 1 для будущих совпадений. 3⃣Возврат результата. Верните значение result, которое содержит количество подмассивов, сумма которых делится на k. 😎 Решение:
class Solution {
public:
int subarraysDivByK(vector<int>& nums, int k) {
int prefixMod = 0, result = 0;
vector<int> modGroups(k);
modGroups[0] = 1;
for (int num : nums) {
prefixMod = (prefixMod + num % k + k) % k;
result += modGroups[prefixMod];
modGroups[prefixMod]++;
}
return result;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
80 лет назад: хроники Победы
Собрали самое главное:
✨ Военные сводки и хроники с фронта
✨ Герои и их подвиги
✨ Культура 1941—1945 годов
✨ Настоящие новости тех лет
Перейти на сайт
#реклама 16+
dzen.ru
О рекламодателе
3 255
Задача: 1024. Video Stitching
Сложность: medium
Вам дана серия видеоклипов со спортивного соревнования, длительность которых составляет несколько секунд. Эти видеоклипы могут накладываться друг на друга и иметь различную длину. Каждый видеоклип описывается массивом clips, где clips[i] = [starti, endi] указывает, что i-й клип начинается в starti и заканчивается в endi. Мы можем произвольно разрезать эти клипы на сегменты. Например, клип [0, 7] может быть разрезан на сегменты [0, 1] + [1, 3] + [3, 7]. Верните минимальное количество клипов, необходимое для того, чтобы мы могли разрезать клипы на сегменты, охватывающие все спортивное событие [0, время]. Если задача невыполнима, верните -1.
Пример:
Input: clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], time = 10
Output: 3
👨💻 Алгоритм:
1⃣Сортировка клипов:
Отсортируйте клипы по начальным значениям. Если начальные значения равны, отсортируйте по конечным значениям в убывающем порядке.
2⃣Выбор клипов:
Используйте жадный алгоритм для выбора клипов. Начните с начальной точки 0 и двигайтесь вперед, выбирая клип, который может покрыть наибольший диапазон.
Если обнаруживается, что начальная точка текущего клипа больше текущей позиции, это означает, что клипы не могут покрыть промежуток, и нужно вернуть -1.
3⃣Проверка покрытия:
Продолжайте процесс, пока не покроете весь диапазон от 0 до T. Если в конце процесса достигнута или превышена точка T, верните количество использованных клипов, иначе верните -1.
😎 Решение:
class Solution {
public:
int videoStitching(vector<vector<int>>& clips, int T) {
sort(clips.begin(), clips.end(), [](const vector<int>& a, const vector<int>& b) {
return a[0] < b[0] || (a[0] == b[0] && a[1] > b[1]);
});
int end = -1, end2 = 0, res = 0;
for (const auto& clip : clips) {
if (end2 >= T || clip[0] > end2) break;
if (end < clip[0] && clip[0] <= end2) {
res++;
end = end2;
}
end2 = max(end2, clip[1]);
}
return end2 >= T ? res : -1;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
Виртуальный сервер в аренду в Турции или России.
Отказоустойчивый виртуальный облачный сервер на базе виртуализации VMWARE по модели подписки.
- Бесплатная миграция инфраструктуры в Турцию
- Размещайте ресурсы в Турции или России и оплачивайте в рублях, турицких лирах или евро.
- Храните резервные копии данных за рубежом для минимизации рисков
- Продолжайте использовать импортное ПО, скачивайте обновления и патчи, общайтесь с техподдержкой
- Доступность сервиса — от 99,982% SLA
- Дата центры Tier III в России и Турции
- Почасовой биллинг и постоплата
Подключите услугу сегодня со скидкой 50% на инфраструктуру.
Подать заявку
#реклама
cloud4y.ru
О рекламодателе
3 255
Задача: 1510. Stone Game IV
Сложность: hard
Алиса и Боб поочередно играют в игру, причем Алиса начинает первой.
Изначально в куче n камней. В ходе каждого хода игрок удаляет любое ненулевое количество камней, являющееся квадратом целого числа.
Кроме того, если игрок не может сделать ход, он/она проигрывает игру.
Дано положительное целое число n, верните true, если и только если Алиса выиграет игру, иначе верните false, предполагая, что оба игрока играют оптимально.
Пример:
Input: n = 1
Output: true
Explanation: Alice can remove 1 stone winning the game because Bob doesn't have any moves.
👨💻 Алгоритм:
1⃣Функция dfs(remain) представляет собой проверку, должен ли текущий игрок выиграть при оставшихся remain камнях.
2⃣Для определения результата dfs(n) необходимо итерировать k от 0, чтобы проверить, существует ли такое k, что dfs(remain - k*k) == False. Чтобы предотвратить избыточные вычисления, используйте карту для хранения результатов функции dfs.
3⃣Не забудьте базовые случаи: dfs(0) == False и dfs(1) == True.
😎 Решение:
class Solution {
public:
bool winnerSquareGame(int n) {
unordered_map<int, bool> cache;
cache[0] = false;
return dfs(cache, n);
}
bool dfs(unordered_map<int, bool>& cache, int remain) {
if (cache.find(remain) != cache.end()) {
return cache[remain];
}
int sqrt_root = (int) sqrt(remain);
for (int i = 1; i <= sqrt_root; ++i) {
if (!dfs(cache, remain - i * i)) {
cache[remain] = true;
return true;
}
}
cache[remain] = false;
return false;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
Бесплатный курс по 3D-моделированию с нуля
Начни карьеру в дизайне и получи первую зарплату!
Вас ждет реальный рабочий процесс:
✅ разные задачи по 3D Blander
✅ опыт общения с клиентами
✅ оплата за проект
Освойте Blender и создайте работу для портфолио
Обучение полностью бесплатное для первых 70 участников.
Осталось 28 мест.
В конце курса мы откроем для вас доступ к звездной распродаже
Там вы сможете обменять звездочки на ценные бонусы:
1. Гайд по выходу на биржу UpWork
2. Курс «Заработок на дизайне»
3. Анимированный концепт Samsung True для портфолио
4. Бессрочный грант на обучение: 15 000 ₽
5. Гайд «Горячие клавиши в Blender»
Записывайтесь сейчас!
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
3 255
Задача: 122. Best Time to Buy and Sell Stock II
Сложность: medium
Вам дан массив целых чисел prices, где prices[i] — это цена акции в i-й день.
Каждый день вы можете купить и/или продать акцию, но держать в руках можно только одну. Разрешено покупать и продавать в тот же день.
Найдите и верните максимальную прибыль, которую можно получить.
Пример:
Input: prices = [7,1,5,3,6,4] Output: 7 Explanation: Купить на 2-й день (цена = 1), продать на 3-й (цена = 5), прибыль = 4 Купить на 4-й день (цена = 3), продать на 5-й (цена = 6), прибыль = 3 Итоговая прибыль = 4 + 3 = 7👨💻 Алгоритм: 1⃣Найдём все возрастающие отрезки (впадина → пик), и прибавим к прибыли разницу между пиком и впадиной. 2⃣Не стоит пытаться найти один глобальный минимум и максимум — это уменьшит прибыль. Лучше учитывать все локальные сделки, даже если они малы. 3⃣Реализуем проход по массиву: Ищем впадину (где цена начинает расти) Затем ищем пик (где рост заканчивается) Добавляем разницу в maxprofit Повторяем до конца 😎 Решение:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int i = 0;
int valley = prices[0];
int peak = prices[0];
int maxprofit = 0;
while (i < prices.size() - 1) {
while (i < prices.size() - 1 && prices[i] >= prices[i + 1]) i++;
valley = prices[i];
while (i < prices.size() - 1 && prices[i] <= prices[i + 1]) i++;
peak = prices[i];
maxprofit += peak - valley;
}
return maxprofit;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
Задача: 240. Search a 2D Matrix II
Сложность: medium
Целые числа в каждой строке отсортированы по возрастанию слева направо
Целые числа в каждом столбце отсортированы по возрастанию сверху вниз
Пример:
Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 Output: true👨💻 Алгоритм: 1⃣Проверяем каждую строку и каждый столбец вдоль диагонали с помощью бинарного поиска 2⃣Для каждой позиции i ищем target сначала по строке, затем по столбцу, начиная с i-й строки и i-го столбца 3⃣Если target найден хотя бы в одном из направлений, возвращаем true, иначе false 😎 Решение:
class Solution {
public:
bool binarySearch(vector<vector<int>>& matrix, int target, int start, bool vertical) {
int lo = start;
int hi = vertical ? matrix[0].size() - 1 : matrix.size() - 1;
while (hi >= lo) {
int mid = (lo + hi) / 2;
if (vertical) {
if (matrix[start][mid] < target) {
lo = mid + 1;
} else if (matrix[start][mid] > target) {
hi = mid - 1;
} else {
return true;
}
} else {
if (matrix[mid][start] < target) {
lo = mid + 1;
} else if (matrix[mid][start] > target) {
hi = mid - 1;
} else {
return true;
}
}
}
return false;
}
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if (matrix.empty() || matrix[0].empty()) return false;
int shorterDim = min(matrix.size(), matrix[0].size());
for (int i = 0; i < shorterDim; i++) {
if (binarySearch(matrix, target, i, true) || binarySearch(matrix, target, i, false)) {
return true;
}
}
return false;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
Repost from Идущий к IT
Я смотрю на эту цифру и до сих пор не верю.
Когда я запускал этот проект, мне реально было страшно. Страшно, что ничего не получится. Что я и мой проект никому не нужен. Страшно, что все увидят, как я публично обосрался.
Я ставил планку в 300т рублей. В самом позитивном сценарии 1млн. Но про 5 миллионов… даже мысли не было. Уже в первые часы стало понятно, что кампания идет не по плану. Сайт краудфандинга не выдержал нашей нагрузки и лег 😁
Особенно в последние три дня — просто какой-то разрыв! Я ощущал, как будто ловлю попутный ветер. В последний час не хватало 50к до 5 млн, и я уже думал сам их докинуть, чтобы красиво закрыть 😁
Но финальная сумма это не так важно. Самое главное это как мы её собрали. Это не инвестиции, не чьи-то деньги под условия и контроль, не кредит. Это вы поверили и поддержали меня напрямую. Вы дали мне возможность оставить за собой полный контроль над easyoffer.
Я чувствую огромную ответственность и нервничаю из-за высоких ожиданий. А вдруг что-то пойдёт не так? А вдруг на релизе кому-то что-то не понравится? Именно поэтому я рад, что могу честно выйти на новый этап и без давления от левых инвесторов.
В такие моменты вспоминаю, с чего всё начиналось. Как 2 года назад я писал свои первые посты на 500 человек о том, как учу программирование. Как записывал первое видео на YouTube про поиск работы. Как пилил первую версию easyoffer, вообще без понимания, что из этого выйдет.
И сейчас я думаю — может, эта история вдохновит кого-то из вас. Может, кто-то запустит свой айтишный проект, найдёт поддержку и соберёт бабки на развитие. Было бы круто
Спасибо за невероятную и колосальную поддержку ❤️
О такой аудитории как вы я не мог мечтать
3 255
+5
Почему вы не используете Битрикс24 CRM с AI?
1- не знал
2- забыл
Рассказываем и напоминаем!
✅Битрикс24 CRM с AI помогает увеличивать продажи, работать с постоянными клиентами и сохранять все важные данные. AI-помощник CoPilot внутри сервиса расшифрует телефонные разговоры и автоматически заполнит карточки клиента в CRM.
Битрикс24 можно использовать бесплатно для всех команд, независимо от их размера.
⚡Не тратьте время на рутину.
Узнать больше
#реклама 16+
bitrix24.ru
О рекламодателе
3 255
Repost from easyoffer
🚨 60 минут до финала
Через час мы закроем краудфандинг easyoffer 2.0
Это последний шанс вписаться в самые выгодные условия.
👉 https://planeta.ru/campaigns/easyoffer
3 255
Repost from easyoffer
Финальный отсчёт:
3 часа до конца краудфандинга easyoffer 2.0!
Это не просто скидка. Это шанс поддержать проект, который поможет и вам и тысячам айтишников готовиться к собеседованиям быстрее, эффективнее и увереннее.
За последние недели:
💥 Нас поддержали уже больше 1450 человек;
🔥 Вместе собрали больше 4,5 млн. рублей на запуск проекта;
Но сейчас важнее другое.
⏳ Через 3 часа всё закончится.
– Больше не будет подписки за 3 200 руб. на целый год!
– Не будет шанса первыми воспользоваться EasyOffer 2.0 на бета-тестировании
Если вы:
+ Планируете менять работу в этом или следующем году;
+ Хотите иметь под рукой 40,000+ вопросов собеседований с разборами, видео-ответами и тренажёрами;
+ Хотите зафиксировать лучшую цену на целый год… (потом будет в 12 раз дороже)
👉 Тогда просто переходите и поддержите нас сейчас:
https://planeta.ru/campaigns/easyoffer
📢 Три часа — и всё.
Не откладывайте на потом.
Спасибо всем, кто уже с нами! 💙
3 255
Задача: 780. Reaching Points
Сложность: hard
Даны четыре целых числа sx, sy, tx и ty, верните true, если возможно преобразовать точку (sx, sy) в точку (tx, ty) с помощью некоторых операций, иначе верните false.
Допустимая операция для некоторой точки (x, y) заключается в преобразовании её либо в (x, x + y), либо в (x + y, y).
Пример:
Input: sx = 1, sy = 1, tx = 3, ty = 5 Output: true Explanation: One series of moves that transforms the starting point to the target is: (1, 1) -> (1, 2) (1, 2) -> (3, 2) (3, 2) -> (3, 5)👨💻 Алгоритм: 1⃣Повторно вычитайте меньшее из {tx, ty} из большего из {tx, ty}. 2⃣Продолжайте вычитание, пока tx и ty больше или равны sx и sy соответственно. 3⃣Ответ будет true, если и только если в конечном итоге мы достигнем точки sx, sy. 😎 Решение:
class Solution {
public:
bool reachingPoints(int sx, int sy, int tx, int ty) {
while (tx >= sx && ty >= sy) {
if (sx == tx && sy == ty) return true;
if (tx > ty) {
tx -= ty;
} else {
ty -= tx;
}
}
return false;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
Repost from easyoffer
⏳ Такого больше не будет!
Всего пара часов и больше не будет возможности получить:
🚀 PRO подписку к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. ➕ Приглашение на закрытое бета-тестирование
👉 Поддержать: https://planeta.ru/campaigns/easyoffer
3 255
Дарим подписку на Яндекс Музыку
Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте бесплатно❤️
Попробовать
#реклама 18+
music.yandex.ru
О рекламодателе
Реклама на Яндексе
3 255
Задача: 1217. Minimum Cost to Move Chips to The Same Position
Сложность: easy
У нас есть n фишек, где позиция i-й фишки равна position[i].
Нам нужно переместить все фишки в одну и ту же позицию. За один шаг мы можем изменить позицию i-й фишки с position[i] на:
position[i] + 2 или position[i] - 2 с затратами = 0.
position[i] + 1 или position[i] - 1 с затратами = 1.
Верните минимальные затраты, необходимые для перемещения всех фишек в одну и ту же позицию.
Пример:
Input: position = [2,2,2,3,3] Output: 2 Explanation: We can move the two chips at position 3 to position 2. Each move has cost = 1. The total cost = 2.👨💻 Алгоритм: 1⃣Посчитать количество фишек на четных и нечетных позициях. 2⃣Сравнить количество фишек на четных и нечетных позициях. 3⃣Вернуть минимальное количество фишек как минимальную стоимость для перемещения всех фишек в одну позицию. 😎 Решение:
class Solution {
public:
int minCostToMoveChips(vector<int>& position) {
int evenCount = 0;
int oddCount = 0;
for (int pos : position) {
if (pos % 2 == 0) {
evenCount++;
} else {
oddCount++;
}
}
return min(evenCount, oddCount);
}
};
Ставь 👍 и забирай 📚 Базу знаний3 255
+4
⚡️ Linux теперь в Telegram!
Ребята сделали крутейший канал про Linux, где на простых картинках и понятном языке обучают работе с этой ОС, делятся полезными фишками и инструментами
Подписывайтесь: @linuxos_tg
3 255
Repost from easyoffer
🚨 Последний шанс!
Сегодня — последний день краудфандинга.
Через несколько часов всё закроется, и больше невозможно будет поучаствовать.
Если ты хотел, но откладывал — СЕЙЧАС самое время. Займёт 2 минуты, но изменит твой подход к собеседованиям надолго.
Поддержи easyoffer 2.0 и получи:
🚀 PRO подписка к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. ➕ Приглашение на закрытое бета-тестирование
PRO подписка к easyoffer 2.0:
✅ Доступ к списку вопросов, которые задаются на собеседованиях + вероятность встречи этих вопросов + их фильтрация по грейдам, типам интервью, компаниям
✅ Доступ к лучшим ответам на вопросы
✅ Список самых частых задач, которые задаются на собеседовании + их фильтрация по грейдам и компаниям
✅ Доступ к лучшим ответам на задачи
✅ Список тестовых заданий компаний + лучшее решение
✅ Доступ к тренажеру "Проработка вопросов", который позволит очень быстро подготовиться к самым частым вопросам
✅ Доступ к тренажеру "Реальное собеседование", который позволит тренироваться проходить собеседование в конкретную компанию
До конца кампании — остались часы.
Поддержать: https://planeta.ru/campaigns/easyoffer
📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ
3 255
Битрикс24 дропнул новую фичу — онлайн-доски
Теперь к вашему рабочему мессенджеру, видеозвонкам и таскам добавился еще один маст-хэв инструмент. Все это бесплатно и в одном комплекте. Офисные стикеры, берегитесь.😊
Узнать больше
#реклама 16+
bitrix24.ru
О рекламодателе
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
