C/C++ | LeetCode
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
نمایش بیشتر3 208
مشترکین
-124 ساعت
-77 روز
-2230 روز
آرشیو پست ها
3 207
Sea Breeze: Ваш дом у моря в Баку. Всего в 3 ч от Москвы
Продажа апартаментов в Sea Breeze. Роскошная жизнь в городе-курорте на побережье Каспия.
🏠 Яркие архитектурные решения, включая апарт-отель в форме лайнера. Развитая инфраструктура: 60 бассейнов, более 50 ресторанов, школы и детсады с английским языком.
✨ Круглогодичный комфорт: медицинский центр, аквапарк и луна-парк, концертные площадки, консьерж-сервис.
🏃♂️ Присоединяйтесь к 25 000 жителям и наслаждайтесь роскошью жизни в Sea Breeze ❤️
Узнать больше
Проектная декларация на сайте https://наш.дом.рф/
#реклама
invest.seabreeze.az
О рекламодателе
3 207
Задача: 661. Image Smoother
Сложность: easy
Дан целочисленный матрица img размером m x n, представляющая градации серого изображения. Верните изображение после применения сглаживания к каждой его ячейке.
Пример:
Input: img = [[1,1,1],[1,0,1],[1,1,1]] Output: [[0,0,0],[0,0,0],[0,0,0]] Explanation: For the points (0,0), (0,2), (2,0), (2,2): floor(3/4) = floor(0.75) = 0 For the points (0,1), (1,0), (1,2), (2,1): floor(5/6) = floor(0.83333333) = 0 For the point (1,1): floor(8/9) = floor(0.88888889) = 0👨💻 Алгоритм: 1⃣Инициализация: Создайте новую матрицу такого же размера, чтобы сохранить результат сглаживания. 2⃣Обработка каждой ячейки: Для каждой ячейки исходной матрицы найдите всех её соседей (включая саму ячейку). Вычислите среднее значение этих ячеек и сохраните его в соответствующей ячейке результирующей матрицы. 3⃣Возврат результата: Верните результирующую матрицу после применения сглаживания ко всем ячейкам. 😎 Решение:
class Solution {
public:
vector<vector<int>> imageSmoother(vector<vector<int>>& img) {
int m = img.size(), n = img[0].size();
vector<vector<int>> result(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int count = 0, total = 0;
for (int ni = max(0, i - 1); ni <= min(m - 1, i + 1); ni++) {
for (int nj = max(0, j - 1); nj <= min(n - 1, j + 1); nj++) {
total += img[ni][nj];
count++;
}
}
result[i][j] = total / count;
}
}
return result;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Задача: 60. Permutation Sequence
Сложность: hard
Дано n, представляющее числа от 1 до n, и k — порядковый номер.
Нужно вернуть k-ю лексикографическую перестановку этих чисел.
Пример:
Input: n = 3, k = 3 Output: "213"👨💻 Алгоритм: 1⃣Сформировать массив nums из символов '1' до 'n' и массив факториалов от 0! до (n-1)! 2⃣Уменьшить k на 1 (чтобы перейти к 0-индексации) 3⃣На каждой позиции определить индекс следующего числа: idx = k / factorial[i], далее обновить k -= idx * factorial[i] Удалить выбранный элемент из nums и добавить к результату 😎 Решение:
class Solution {
public:
string getPermutation(int n, int k) {
vector<int> factorials(n);
vector<char> nums;
factorials[0] = 1;
nums.push_back('1');
for (int i = 1; i < n; ++i) {
factorials[i] = factorials[i - 1] * i;
nums.push_back(char(i + 1 + '0'));
}
--k;
string result = "";
for (int i = n - 1; i > -1; --i) {
int idx = k / factorials[i];
k -= idx * factorials[i];
result += nums[idx];
nums.erase(nums.begin() + idx);
}
return result;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Крупнейший университет искусственного интеллекта
Приглашаем на бесплатный курс по искусственному интеллекту!
Мы подготовили для тебя 5 занятий по теме «Разработка нейро-сотрудников на GPT». Пройди регистрацию для получения полного бесплатного доступа к курсу.
✨ 8 000+ студентов со всего мира
✨ 600+ AI-проектов, созданных студентами
✨ Сборная Университета — победители крупнейших AI-хакатонов России
✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие)
✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие)
Будем рады видеть тебя в наших рядах!
Узнать больше
#реклама 16+
neural-university.ru
О рекламодателе
3 207
Задача: 1538. Guess the Majority in a Hidden Array
Сложность: medium
У нас есть целочисленный массив
nums, где все числа в nums равны 0 или 1. Вам не будет предоставлен прямой доступ к массиву, вместо этого у вас будет API ArrayReader, который имеет следующие функции:
int query(int a, int b, int c, int d): где 0 <= a < b < c < d < ArrayReader.length(). Функция возвращает распределение значений 4 элементов и возвращает:
4: если значения всех 4 элементов одинаковы (0 или 1).
2: если три элемента имеют значение 0 и один элемент имеет значение 1 или наоборот.
0: если два элемента имеют значение 0 и два элемента имеют значение 1.
int length(): Возвращает размер массива.
Вам разрешено вызывать query() не более 2 * n раз, где n равно ArrayReader.length().
Верните любой индекс самого частого значения в nums, в случае ничьей верните -1.
Пример:
Input: nums = [0,0,1,0,1,1,1,1]
Output: 5
Explanation: The following calls to the API
reader.length() // returns 8 because there are 8 elements in the hidden array.
reader.query(0,1,2,3) // returns 2 this is a query that compares the elements nums[0], nums[1], nums[2], nums[3]
// Three elements have a value equal to 0 and one element has value equal to 1 or viceversa.
reader.query(4,5,6,7) // returns 4 because nums[4], nums[5], nums[6], nums[7] have the same value.
we can infer that the most frequent value is found in the last 4 elements.
Index 2, 4, 6, 7 is also a correct answer.
👨💻 Алгоритм:
1⃣Получите n вызовом функции length. Объявите и инициализируйте переменные cntEqual = 1, cntDiffer = 0, indexDiffer = -1. Вызовите query(0, 1, 2, 3) и сохраните результат в переменной query0123. Вызовите query(1, 2, 3, 4) и сохраните результат в переменной query1234. Если query1234 равно query0123, увеличьте cntEqual, иначе увеличьте cntDiffer и обновите indexDiffer = 4.
2⃣Итерация от i = 5 до n-1. Если значение query(1, 2, 3, i) равно query0123, увеличьте cntEqual, иначе увеличьте cntDiffer и обновите indexDiffer = i. Дополнительные проверки для первых элементов: если query(0, 2, 3, 4) равно query1234, увеличьте cntEqual, иначе увеличьте cntDiffer и обновите indexDiffer = 1. Если query(0, 1, 3, 4) равно query1234, увеличьте cntEqual, иначе увеличьте cntDiffer и обновите indexDiffer = 2. Если query(0, 1, 2, 4) равно query1234, увеличьте cntEqual, иначе увеличьте cntDiffer и обновите indexDiffer = 3.
3⃣Если cntEqual > cntDiffer, верните 0. Если cntDiffer > cntEqual, верните indexDiffer. Верните -1.
😎 Решение:
class Solution {
int cntEqual = 1, cntDiffer = 0, indexDiffer = -1;
void f(bool equal, int i) {
if (equal) {
cntEqual++;
} else {
cntDiffer++;
indexDiffer = i;
}
}
public:
int guessMajority(ArrayReader& reader) {
int n = reader.length(), query0123 = reader.query(0, 1, 2, 3), query1234 = reader.query(1, 2, 3, 4);
f(query1234 == query0123, 4);
for (int i = 5; i < n; i++) {
f(reader.query(1, 2, 3, i) == query0123, i);
}
f(reader.query(0, 2, 3, 4) == query1234, 1);
f(reader.query(0, 1, 3, 4) == query1234, 2);
f(reader.query(0, 1, 2, 4) == query1234, 3);
return cntEqual > cntDiffer ? 0 : cntDiffer > cntEqual ? indexDiffer : -1;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Специальность «Интеллектуальный анализ данных»
🎓Открыт набор в Университет IThub 2025-2026!
Программа бакалавриата «Прикладная информатика»
Программа создана для будущих аналитиков данных и специалистов по машинному обучению, которые хотят работать с большими данными и искусственным интеллектом.
Она идеально подойдет выпускникам колледжей, которые получили диплом по IT-специальности: разработке, программированию, информационной безопасности, системному администрированию.
Программа сочетает актуальные знания в информатике и навыки работы с данными, что делает выпускников востребованными в IT-компаниях, банках, ритейле и других сферах, где нужен анализ данных.
📚Практические навыки + стажировки и 💰трудоустройство!
✅День открытых дверей 22 июня!
Перейти на сайт
#реклама 16+
univer.ithub.ru
О рекламодателе
3 207
Задача: 1506. Find Root of N-Ary Tree
Сложность: medium
Вам даны все узлы N-арного дерева в виде массива объектов Node, где каждый узел имеет уникальное значение.
Верните корень N-арного дерева.
Пример:
Input: tree = [1,null,3,2,4,null,5,6]
Output: [1,null,3,2,4,null,5,6]
Explanation: The tree from the input data is shown above.
The driver code creates the tree and gives findRoot the Node objects in an arbitrary order.
For example, the passed array could be [Node(5),Node(4),Node(3),Node(6),Node(2),Node(1)] or [Node(2),Node(6),Node(1),Node(3),Node(5),Node(4)].
The findRoot function should return the root Node(1), and the driver code will serialize it and compare with the input data.
The input data and serialized Node(1) are the same, so the test passes.
👨💻 Алгоритм:
1⃣Используйте хэшсет (named as seen) для отслеживания всех посещенных дочерних узлов. В конечном итоге корневой узел не будет в этом множестве.
2⃣Выполняйте первую итерацию, проходя по элементам входного списка. Для каждого элемента добавляйте его дочерние узлы в хэшсет seen. Поскольку значение каждого узла уникально, можно добавлять либо сам узел, либо просто его значение в хэшсет.
3⃣Посетите список еще раз. На этот раз у нас будут все дочерние узлы в хэшсете. Как только вы наткнетесь на узел, который не находится в хэшсете, это и будет корневой узел, который мы ищем.
😎 Решение:
class Solution {
public:
Node* findRoot(vector<Node*> tree) {
unordered_set<int> seen;
for (Node* node : tree) {
for (Node* child : node->children) {
seen.insert(child->val);
}
}
Node* root = nullptr;
for (Node* node : tree) {
if (seen.find(node->val) == seen.end()) {
root = node;
break;
}
}
return root;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Стань партнером Edler.pro и зарабатывай от 500 000 ₽/мес
✅ Продавай и внедряй решения по автоматизации найма и обучения сотрудников.
💰 Зарабатывай от 100 000 до 750 000 ₽ с каждого клиента
Стартовый бюджет: от 200 000 ₽
Окупаемость: 14 дней ⚡
Узнать больше
#реклама 16+
edler.pro
О рекламодателе
3 207
Задача: 1016. Binary String With Substrings Representing 1 To N
Сложность: medium
Если задана двоичная строка s и положительное целое число n, верните true, если двоичное представление всех целых чисел в диапазоне [1, n] является подстрокой s, или false в противном случае. Подстрока - это непрерывная последовательность символов в строке.
Пример:
Input: s = "0110", n = 3 Output: true👨💻 Алгоритм: 1⃣Генерация двоичных строк: Для каждого числа в диапазоне [1, n] сгенерируйте его двоичное представление. 2⃣Проверка подстрок: Проверьте, является ли каждое из двоичных представлений подстрокой строки s. 3⃣Возврат результата: Если все двоичные представления являются подстроками строки s, верните true. В противном случае, верните false. 😎 Решение:
class Solution {
public:
bool queryString(string s, int n) {
for (int i = 1; i <= n; ++i) {
string binary = bitset<32>(i).to_string();
binary.erase(0, binary.find_first_not_of('0'));
if (s.find(binary) == string::npos) {
return false;
}
}
return true;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Получи грант на обучение в Центральном университете
Прояви себя, получи грант до 2,8 млн на обучение ИТ и бизнесу в вузе.
Для школьников 10-х и 11-х классов, СПО.
Подать заявку
#реклама
apply.centraluniversity.ru
О рекламодателе
3 207
Задача: 1008. Construct Binary Search Tree from Preorder Traversal
Сложность: medium
Дается массив целых чисел preorder, который представляет собой обход BST (т.е, гарантируется, что для заданных тестовых случаев всегда можно найти дерево двоичного поиска с заданными требованиями. Дерево двоичного поиска - это двоичное дерево, в котором для каждого узла любой потомок Node.left имеет значение строго меньше, чем Node.val, а любой потомок Node.right имеет значение строго больше, чем Node.val. При обходе бинарного дерева в предварительном порядке сначала выводится значение узла, затем обход Node.left, затем обход Node.right.
Пример:
Input: preorder = [8,5,1,7,10,12] Output: [8,5,10,1,7,null,12]👨💻 Алгоритм: 1⃣Инициализация переменных и функций: Создайте класс узла дерева TreeNode с атрибутами val, left и right. Инициализируйте индекс, который будет отслеживать текущую позицию в массиве preorder. 2⃣Рекурсивная функция для построения дерева: Создайте рекурсивную функцию constructBST с аргументами preorder, lower и upper, которые будут ограничивать значения узлов для текущей ветви дерева. Если текущий индекс выходит за границы массива preorder, верните null. Получите текущее значение из preorder и проверьте, находится ли оно в пределах допустимого диапазона [lower, upper]. Если нет, верните null. 3⃣Создание узла и рекурсивное построение поддеревьев: Создайте новый узел с текущим значением и увеличьте индекс. Рекурсивно вызовите функцию constructBST для создания левого поддерева с обновленным верхним пределом (upper равным значению текущего узла). Рекурсивно вызовите функцию constructBST для создания правого поддерева с обновленным нижним пределом (lower равным значению текущего узла). Верните созданный узел. 😎 Решение:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int index = 0;
TreeNode* bstFromPreorder(vector<int>& preorder) {
return constructBST(preorder, INT_MIN, INT_MAX);
}
TreeNode* constructBST(vector<int>& preorder, int lower, int upper) {
if (index == preorder.size()) {
return NULL;
}
int val = preorder[index];
if (val < lower || val > upper) {
return NULL;
}
index++;
TreeNode* root = new TreeNode(val);
root.left = constructBST(preorder, lower, val);
root.right = constructBST(preorder, val, upper);
return root;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Получи грант до 1,2 млн руб. на обучение в магистратуре
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
- 4 офлайн программы по востребованным направлениям ИТ
- Онлайн-программа по машинному обучению
- 300 мест с грантами до 1,2 млн руб.
- Вечерние занятия и учеба по выходным — удобно совмещать с работой
- Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
- Возможность стажировок и трудоустройства в ведущих компаниях
- Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии.
Оставляй заявку на грант уже сейчас!
Подать заявку
#реклама 16+
apply.centraluniversity.ru
О рекламодателе
3 207
Задача: 636. Exclusive Time of Functions
Сложность: medium
На однопоточном процессоре выполняется программа, содержащая n функций. Каждая функция имеет уникальный ID от 0 до n-1. Вызовы функций хранятся в стеке вызовов: когда начинается вызов функции, ее ID заталкивается в стек, а когда вызов функции заканчивается, ее ID выгружается из стека. Функция, чей идентификатор находится в верхней части стека, является текущей выполняемой функцией. Каждый раз, когда функция запускается или завершается, мы пишем лог с идентификатором, началом или завершением и меткой времени. Вам предоставляется список logs, где logs[i] представляет собой i-е сообщение лога, отформатированное как строка "{function_id}:{"start" | "end"}:{timestamp}". Например, "0:start:3" означает, что вызов функции с идентификатором 0 начался в начале временной метки 3, а "1:end:2" означает, что вызов функции с идентификатором 1 завершился в конце временной метки 2. Обратите внимание, что функция может быть вызвана несколько раз, возможно, рекурсивно. Исключительное время функции - это сумма времен выполнения всех вызовов функции в программе. Например, если функция вызывается дважды, причем один вызов выполняется за 2 единицы времени, а другой - за 1 единицу, то эксклюзивное время равно 2 + 1 = 3. Верните эксклюзивное время каждой функции в массив, где значение по i-му индексу представляет собой эксклюзивное время для функции с идентификатором i.
Пример:
Input: n = 2, logs = ["0:start:0","1:start:2","1:end:5","0:end:6"] Output: [3,4]👨💻 Алгоритм: 1⃣Парсинг логов: Пройдитесь по каждому логу, чтобы распознать действие (start или end) и идентификатор функции вместе с временной меткой. 2⃣Использование стека: Используйте стек для отслеживания текущих вызовов функций. Если лог содержит start, добавьте функцию в стек и начните отсчет времени. Если лог содержит end, снимите функцию со стека и обновите эксклюзивное время. 3⃣Обновление времени выполнения: Когда функция завершает выполнение, обновите ее эксклюзивное время и также учитывайте время выполнения вложенных функций. 😎 Решение:
class Solution {
public:
vector<int> exclusiveTime(int n, vector<string>& logs) {
stack<int> stack;
vector<int> times(n, 0);
int prevTime = 0;
for (const string& log : logs) {
stringstream ss(log);
string fidStr, type, timeStr;
getline(ss, fidStr, ':');
getline(ss, type, ':');
getline(ss, timeStr, ':');
int fid = stoi(fidStr);
int time = stoi(timeStr);
if (type == "start") {
if (!stack.empty()) {
times[stack.top()] += time - prevTime;
}
stack.push(fid);
prevTime = time;
} else {
times[stack.top()] += time - prevTime + 1;
stack.pop();
prevTime = time + 1;
}
}
return times;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
VK Weekend Offer для бэкенд-разработчиков
28–29 июня VK проведёт Weekend Offer для бэкендеров с опытом от трёх лет. Участников со знанием Java, Go, Python или C++ ждут технические собеседования, знакомство с продуктами и, если всё сложится, офер уже в конце выходных.
Ребята много лет создают облачные решения, системы рекомендаций и поисковые движки — всё с миллионами пользователей в проде — и сейчас ищут новых коллег. Поэтому оставляйте заявку до 25 июня, чтобы попасть в команду за выходные!
Подробности — на сайте.
Подать заявку
#реклама 16+
team.vk.company
О рекламодателе
3 207
Задача: 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 {
vector<int> parent, rank; int count;
public:
UnionFind(int size) : parent(size, -1), rank(size, 0), count(0) {}
void addLand(int x) { if (parent[x] < 0) { parent[x] = x; count++; } }
bool isLand(int x) { return parent[x] >= 0; }
int numberOfIslands() { return count; }
int find(int x) { return parent[x] != x ? parent[x] = find(parent[x]) : x; }
void unionSet(int x, int y) { int xset = find(x), yset = find(y);
if (xset != yset) { if (rank[xset] < rank[yset]) parent[xset] = yset;
else { parent[yset] = xset; if (rank[xset] == rank[yset]) rank[xset]++; } count--; } }
};
class Solution {
public:
vector<int> numIslands2(int m, int n, vector<vector<int>>& positions) {
UnionFind dsu(m * n); vector<int> answer;
vector<int> x = {-1, 1, 0, 0}, y = {0, 0, -1, 1};
for (auto& pos : positions) {
int land = pos[0
Ставь 👍 и забирай 📚 Базу знаний3 207
20 000 баллов на сервисы Яндекс Go для бизнеса
Подключайтесь к сервису и оптимизируйте бизнес-процессы без бумажной волокиты.
Яндекс Go для бизнеса как личный помощник:
- организует командировку;
- отвезет до работы;
- накормит сотрудников.
Пока вы экономите время и силы.
Узнать больше
#реклама 16+
business.go.yandex
О рекламодателе
Реклама на Яндексе
3 207
Задача: 480. Sliding Window Median
Сложность: hard
Медиана — это среднее значение в упорядоченном списке целых чисел. Если размер списка четный, среднего значения не существует, поэтому медианой считается среднее значение двух средних чисел.
Например, если arr = [2, 3, 4], медиана равна 3.
Например, если arr = [1, 2, 3, 4], медиана равна (2 + 3) / 2 = 2.5.
Вам дан целочисленный массив nums и целое число k. Существует скользящее окно размера k, которое перемещается от самого левого края массива до самого правого. Вы можете видеть только k чисел в окне. Каждый раз скользящее окно перемещается вправо на одну позицию.
Верните массив медиан для каждого окна в исходном массиве. Ответы с точностью до 10^-5 будут приниматься.
Пример:
Input: nums = [1,3,-1,-3,5,3,6,7], k = 3 Output: [1.00000,-1.00000,-1.00000,3.00000,5.00000,6.00000] Explanation: Window position Median --------------- ----- [1 3 -1] -3 5 3 6 7 1 1 [3 -1 -3] 5 3 6 7 -1 1 3 [-1 -3 5] 3 6 7 -1 1 3 -1 [-3 5 3] 6 7 3 1 3 -1 -3 [5 3 6] 7 5 1 3 -1 -3 5 [3 6 7] 6👨💻 Алгоритм: 1⃣Сохраняйте числа в контейнере окна размера k, выполняя следующие операции: Вставка входящего элемента. Удаление выходящего элемента. 2⃣ Отсортируйте окно, чтобы найти медианы. Вместо того чтобы каждый раз копировать и сортировать k последовательных элементов из входных данных, вставляйте и удаляйте по одному элементу при каждом сдвиге окна. 3⃣ Поддерживайте окно в отсортированном состоянии до и после операций вставки и удаления. 😎 Решение:
#include <vector>
#include <algorithm>
std::vector<double> medianSlidingWindow(std::vector<int>& nums, int k) {
std::vector<double> medians;
for (int i = 0; i + k <= nums.size(); i++) {
std::vector<int> window(nums.begin() + i, nums.begin() + i + k);
std::sort(window.begin(), window.end());
if (k % 2 == 1) {
medians.push_back(window[k / 2]);
} else {
medians.push_back((window[k / 2 - 1] + window[k / 2]) / 2.0);
}
}
return medians;
}
Ставь 👍 и забирай 📚 Базу знаний3 207
Профессия «Аналитик данных» - начни учиться бесплатно!
Освойте высокооплачиваемую IT-профессию с нуля за 6 месяцев. Выдаём диплом, помогаем с трудоустройством.
Excel, SQL, PowerBI, Python.
Преимущества обучения в Академии Eduson:
🎓 можно начать учиться бесплатно, если не понравится — не платите
🎓 официальный государственный диплом
🎓 рассрочка 0% на 24 мес.
🎓 бессрочный доступ к лекциям и материалам, которые регулярно обновляются
🎓 личный куратор с Вами на связи
Начните обучаться онлайн и получать стабильный доход уже во время обучения!
Подать заявку
#реклама 16+
eduson.academy
О рекламодателе
3 207
Задача: 179. Largest Number
Сложность: medium
Дан список неотрицательных целых чисел nums. Организуйте их таким образом, чтобы они составляли наибольшее число и верните его.
Поскольку результат может быть очень большим, необходимо вернуть строку вместо целого числа.
Пример:
Input: nums = [10,2] Output: "210"👨💻 Алгоритм: 1⃣Преобразование и сортировка: Преобразовать каждое число в строку и отсортировать массив строк по убыванию, используя компаратор, сравнивающий a + b и b + a. 2⃣Проверка на нули: Если после сортировки первый элемент равен "0", вернуть "0", так как все элементы — нули. 3⃣Формирование результата: Сконкатенировать отсортированные строки и вернуть результат. 😎 Решение:
cppКопироватьРедактироватьclass Solution {
public:
string largestNumber(vector<int> &nums) {
vector<string> strNums(nums.size());
for (int i = 0; i < nums.size(); ++i) {
strNums[i] = to_string(nums[i]);
}
sort(strNums.begin(), strNums.end(),
[](string &a, string &b) { return a + b > b + a; });
if (strNums[0] == "0") {
return "0";
}
string largestNumberStr;
for (string numAsStr : strNums) {
largestNumberStr += numAsStr;
}
return largestNumberStr;
}
};
Ставь 👍 и забирай 📚 Базу знаний3 207
Профессия «Аналитик данных». Рассрочка 0%
Освойте высокооплачиваемую IT-профессию с нуля за 6 месяцев. Выдаём диплом, помогаем с трудоустройством.
Excel, SQL, PowerBI, Python.
Преимущества обучения в Академии Eduson:
🎓 официальный государственный диплом
🎓если после курса не найдёте работу — мы возвращаем деньги и это зафиксировано в договоре
🎓 рассрочка 0% на 24 мес., то есть без переплаты
🎓 бессрочный доступ к лекциям и материалам, которые продолжают обновляться
🎓 личный куратор с Вами на связи
Начните обучаться онлайн и получать стабильный доход уже во время обучения!
Узнать больше
Финансовые услуги оказывает: ПАО "Сбербанк", АО "Тинькофф Банк" и др..
#реклама 16+
eduson.academy
О рекламодателе
