C# | LeetCode
Kanalga Telegram’da o‘tish
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Вопросы собесов t.me/+sjKGQXl79ytkYzIy Вакансии t.me/+BQFHXZQ0zrViNGIy
Ko'proq ko'rsatish3 289
Obunachilar
Ma'lumot yo'q24 soatlar
-77 kunlar
-1630 kunlar
Postlar arxiv
3 290
#medium
Задача: 756. Pyramid Transition Matrix
Вы складываете блоки так, чтобы получилась пирамида. Каждый блок имеет цвет, который представлен одной буквой. Каждый ряд блоков содержит на один блок меньше, чем ряд под ним, и располагается по центру сверху. Чтобы пирамида выглядела эстетично, допускаются только определенные треугольные узоры. Треугольный узор состоит из одного блока, уложенного поверх двух блоков. Шаблоны задаются в виде списка допустимых трехбуквенных строк, где первые два символа шаблона представляют левый и правый нижние блоки соответственно, а третий символ - верхний блок. Например, "ABC" представляет треугольный шаблон с блоком 'C', уложенным поверх блоков 'A' (слева) и 'B' (справа). Обратите внимание, что это отличается от "BAC", где "B" находится слева внизу, а "A" - справа внизу. Вы начинаете с нижнего ряда блоков bottom, заданного в виде одной строки, который вы должны использовать в качестве основания пирамиды. Учитывая bottom и allowed, верните true, если вы можете построить пирамиду до самой вершины так, чтобы каждый треугольный узор в пирамиде был в allowed, или false в противном случае.
Пример:
Input: bottom = "BCD", allowed = ["BCC","CDE","CEA","FFF"] Output: true👨💻 Алгоритм: 1⃣Создайте структуру данных для хранения допустимых треугольных узоров. 2⃣Напишите рекурсивную функцию, которая проверяет возможность построения следующего уровня пирамиды. 3⃣Начните с нижнего уровня пирамиды и используйте рекурсию для построения каждого следующего уровня, проверяя каждый треугольный узор на допустимость. 😎 Решение:
public class Solution {
public bool PyramidTransition(string bottom, IList<string> allowed) {
var allowedDict = new Dictionary<string, List<char>>();
foreach (var pattern in allowed) {
var key = pattern.Substring(0, 2);
var value = pattern[2];
if (!allowedDict.ContainsKey(key)) {
allowedDict[key] = new List<char>();
}
allowedDict[key].Add(value);
}
return CanBuild(bottom, allowedDict);
}
private bool CanBuild(string currentLevel, Dictionary<string, List<char>> allowedDict) {
if (currentLevel.Length == 1) return true;
var nextLevelOptions = new List<List<char>>();
for (int i = 0; i < currentLevel.Length - 1; i++) {
var key = currentLevel.Substring(i, 2);
if (!allowedDict.ContainsKey(key)) return false;
nextLevelOptions.Add(allowedDict[key]);
}
return CanBuildNextLevel(nextLevelOptions, 0, "", allowedDict);
}
private bool CanBuildNextLevel(List<List<char>> options, int index, string nextLevel, Dictionary<string, List<char>> allowedDict) {
if (index == options.Count) return CanBuild(nextLevel, allowedDict);
foreach (var option in options[index]) {
if (CanBuildNextLevel(options, index + 1, nextLevel + option, allowedDict)) return true;
}
return false;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
+6
Видовые квартиры в Ялте, у моря в рассрочку!
-Уникальный Климат
-Исторически Престижная Локация
-Свой Пляж и Парк❤️
-Всесезонный Бассейн
-Квартиры с террасой
-Собственный Торговый Центр
-Wellness-зоны и SPA
-Детские пространства 2,7 км²
⚡ Рассрочка 0% от застройщика
✅ ФЗ-214
✨ Специальные условия в марте!
Узнать больше
Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО СЗ НОВАЯ ЛИВАДИЯ
#реклама
krim-yalta-estate.ru
О рекламодателе
3 290
#medium
Задача: 755. Pour Water
Вам дана карта высот, представленная в виде целочисленного массива heights, где heights[i] - высота местности в точке i. Ширина в каждой точке равна 1. Вам также даны два целых числа volume и k. Единицы объема воды будут падать в точке k. Вода сначала падает в точке k и упирается в самую высокую местность или воду в этой точке. Затем она течет по следующим правилам: если капля в конечном итоге упадет, двигаясь влево, то двигайтесь влево. Иначе, если капля в конечном итоге упадет, двигаясь вправо, то двигайтесь вправо. Иначе поднимайтесь в текущее положение. Здесь "в конечном итоге упадет" означает, что капля в конечном итоге окажется на более низком уровне, если она будет двигаться в этом направлении. Кроме того, уровень означает высоту местности плюс вода в этом столбе. Мы можем предположить, что на двух сторонах, выходящих за пределы массива, есть бесконечно высокая местность. Также не может быть частичного равномерного распределения воды более чем на один блок сетки, и каждая единица воды должна находиться ровно в одном блоке.
Пример:
Input: heights = [2,1,1,2,1,2,2], volume = 4, k = 3 Output: [2,2,2,3,2,2,2]👨💻 Алгоритм: 1⃣Инициализируйте цикл для добавления объема воды. 2⃣Для каждой единицы воды: Проверьте, может ли вода двигаться влево и упасть на более низкий уровень. Если нет, проверьте, может ли вода двигаться вправо и упасть на более низкий уровень. Если нет, добавьте воду в текущую позицию. 3⃣Повторите шаг 2, пока не будет добавлен весь объем воды. 😎 Решение:
public class Solution {
public int[] PourWater(int[] heights, int volume, int k) {
for (int v = 0; v < volume; v++) {
int dropIndex = k;
foreach (int d in new int[]{-1, 1}) {
int i = k;
while (i + d >= 0 && i + d < heights.Length && heights[i + d] <= heights[i]) {
if (heights[i + d] < heights[i]) {
dropIndex = i + d;
}
i += d;
}
if (dropIndex != k) break;
}
heights[dropIndex]++;
}
return heights;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
📺 Уникальная база IT собеседований
456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы.
Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д.
🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!
3 290
Онлайн-магистратура в IT совместно с ИТМО, МИФИ и МФТИ
День открытых дверей
19 марта 19:00 мск | Онлайн
Все программы 2025, общение со студентами и экспертами из вузов и Яндекса. Ответы на вопросы.
Зарегистрироваться
#реклама 16+
practicum.yandex.ru
О рекламодателе
3 290
#medium
Задача: 754. Reach a Number
Вы стоите в позиции 0 на бесконечной числовой прямой. В позиции target находится пункт назначения. Вы можете сделать некоторое количество ходов numMoves так, чтобы: на каждом ходу вы могли пойти либо налево, либо направо. Во время i-го хода (начиная с i == 1 до i == numMoves) вы делаете i шагов в выбранном направлении. Учитывая целое число target, верните минимальное количество ходов (т.е. минимальное numMoves), необходимое для достижения пункта назначения.
Пример:
Input: target = 2 Output: 3👨💻 Алгоритм: 1⃣Инициализируйте переменную для текущей позиции (position) и счетчик шагов (steps). 2⃣Используйте цикл, чтобы добавлять к position текущее количество шагов и увеличивать steps. 3⃣Если position достигает или превышает target и разница между position и target четная, остановите цикл и верните steps. 😎 Решение:
public class Solution {
public int ReachTarget(int target) {
target = Math.Abs(target);
int position = 0;
int steps = 0;
while (position < target || (position - target) % 2 != 0) {
steps++;
position += steps;
}
return steps;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
Repost from easyoffer
На easyoffer 2.0 появится:
🎯 Тренажер "Проработка вопросов"
✅ Метод интервальных повторений и флеш-карточки
✅ Персональный подход изучения на основе ваших ответов
✅ Упор на самые частые вопросы
📌 Интервальные повторения по карточкам это научно доказанный метод эффективного обучения. Каждая карточка – это вопрос, который задают на собеседовании, вы можете выбрать "Не знаю", "Знаю", "Не спрашивать". После ответа вам показывается правильный ответ и возможность изучить вопрос подробнее (примеры ответов других людей). От ваших ответов зависит то, как часто карточки будут показываться на следующей тренировке. Трудные вопросы показываются чаще, простые – реже. Это позволяет бить в слабые места. Кроме того, изначальный порядок карточек зависит от частотности (вероятности встретить вопрос).
🚀 Благодаря этому тренажеру вы сможете очень быстро подготовиться к собеседованию, т.к. фокусируетесь отвечать на самые частые вопросы. Именно так готовился я сам, когда искал первую работу программистом.
Уже в течение недели я объявлю о старте краудфандинговой кампании на сбор финансирования, чтобы ускорить разработку сайта. Все кто поддержит проект до официального релиза получат самые выгодные условия пользования сервисом. А именно 1 год доступа к сайту по цене месячной подписки.
‼️ Очень важно, чтобы как можно больше людей поддержали проект в первые дни, по-этому те кто окажет поддержку первыми получат еще более выгодную стоимость на годовую подписку и существенный 💎 бонус о котором я позже расскажу в этом телеграм канале. Подписывайтесь, чтобы узнать о старте проекта раньше других и воспользоваться лимитированными вознаграждениями.
3 290
15 новых домов Deluxe и премиум-класса с видами на воду
🏠Станьте владельцем одной из элитных квартир в г. Москва.
⚡Выгодные условия со скидкой до 20% и рассрочкой без %.
✅Получите свежий каталог с новыми предложениями по ссылке.
Узнать больше
#реклама
msk.timeproperty.ru
О рекламодателе
3 290
#medium
Задача: 753. Cracking the Safe
Имеется сейф, защищенный паролем. Пароль представляет собой последовательность из n цифр, каждая из которых может находиться в диапазоне [0, k - 1]. Сейф имеет особый способ проверки пароля. Например, правильный пароль - "345", а вы вводите "012345": после ввода 0 последние 3 цифры - "0", что неверно. После ввода 1 последние 3 цифры - "01", что неверно. После ввода 2 последние 3 цифры - "012", что неверно.
После ввода 3 последние 3 цифры - "123", что неверно. После ввода 4 последние 3 цифры - "234", что неверно. После ввода 5 последние 3 цифры - "345", что верно, и сейф разблокируется. Верните любую строку минимальной длины, которая разблокирует сейф на определенном этапе ввода.
Пример:
Input: n = 1, k = 2 Output: "10"👨💻 Алгоритм: 1⃣Создайте граф, где каждая вершина представляет собой строку длины n-1, а каждое ребро между двумя вершинами представляет собой добавление одной из цифр из диапазона [0, k-1]. 2⃣Используйте алгоритм Эйлерова пути или цикла для нахождения пути, который проходит через каждое ребро ровно один раз. 3⃣Составьте итоговую строку, которая включает начальную вершину и все добавленные цифры. 😎 Решение:
using System.Collections.Generic;
using System.Text;
public class Solution {
public string CrackSafe(int n, int k) {
var seen = new HashSet<string>();
var result = new StringBuilder();
string startNode = new string('0', n - 1);
Dfs(startNode, k, seen, result);
result.Append(startNode);
return result.ToString();
}
private void Dfs(string node, int k, HashSet<string> seen, StringBuilder result) {
for (int x = 0; x < k; x++) {
string neighbor = node + x;
if (!seen.Contains(neighbor)) {
seen.Add(neighbor);
Dfs(neighbor.Substring(1), k, seen, result);
result.Append(x);
}
}
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
#medium
Задача: 752. Open the Lock
Перед вами замок с 4 круглыми колесами. Каждое колесо имеет 10 слотов: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. Колеса могут свободно вращаться и оборачиваться: например, мы можем повернуть "9" так, чтобы получился "0", или "0" так, чтобы получился "9". Каждый ход состоит из поворота одного колеса на один слот. Изначально замок начинается с '0000', строки, представляющей состояние 4 колес. Вам дан список тупиков, то есть если замок отобразит любой из этих кодов, колеса замка перестанут вращаться, и вы не сможете его открыть. Учитывая цель, представляющую значение колес, которое позволит отпереть замок, верните минимальное общее количество оборотов, необходимое для открытия замка, или -1, если это невозможно.
Пример:
Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202" Output: 6👨💻 Алгоритм: 1⃣Используйте алгоритм BFS для поиска кратчайшего пути от начального состояния '0000' до целевого состояния, избегая тупиков. Инициализируйте очередь с начальным состоянием '0000' и начальным шагом 0. Используйте множество для отслеживания посещенных состояний, чтобы избежать повторного посещения одного и того же состояния. 2⃣Для каждого состояния в очереди: Проверьте все возможные переходы на следующий шаг, вращая каждое колесо на +1 и -1. Если найденное состояние является целевым, верните количество шагов. Если найденное состояние не является тупиком и не было посещено ранее, добавьте его в очередь и отметьте как посещенное. 3⃣Если очередь пуста и целевое состояние не найдено, верните -1. 😎 Решение:
public class Solution {
public int OpenLock(string[] deadends, string target) {
var dead = new HashSet<string>(deadends);
var queue = new Queue<(string, int)>();
queue.Enqueue(("0000", 0));
var visited = new HashSet<string> { "0000" };
while (queue.Count > 0) {
var (node, steps) = queue.Dequeue();
if (node == target) return steps;
if (dead.Contains(node)) continue;
foreach (var neighbor in Neighbors(node)) {
if (!visited.Contains(neighbor)) {
visited.Add(neighbor);
queue.Enqueue((neighbor, steps + 1));
}
}
}
return -1;
}
private IEnumerable<string> Neighbors(string node) {
var res = new List<string>();
var nodeArray = node.ToCharArray();
for (int i = 0; i < 4; i++) {
var x = nodeArray[i] - '0';
for (int d = -1; d <= 1; d += 2) {
var y = (x + d + 10) % 10;
nodeArray[i] = (char)(y + '0');
res.Add(new string(nodeArray));
nodeArray[i] = (char)(x + '0');
}
}
return res;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
#medium
Задача: 751. IP to CIDR
Дан указатель на начало односвязного списка и два целых числа left и right, где left <= right. Необходимо перевернуть узлы списка, начиная с позиции left и заканчивая позицией right, и вернуть измененный список.
Пример:
Input: ip = "255.0.0.7", n = 10 Output: ["255.0.0.7/32","255.0.0.8/29","255.0.0.16/32"]👨💻 Алгоритм: 1⃣Преобразовать начальный IP-адрес в целое число. 2⃣Пока количество оставшихся IP-адресов n больше нуля: Определить наибольший блок, который начинается с текущего IP-адреса и не превышает количество оставшихся IP-адресов. Добавить этот блок к результату. Увеличить текущий IP-адрес на размер блока. Уменьшить количество оставшихся IP-адресов n. 3⃣Преобразовать блоки обратно в формат CIDR и вернуть их. 😎 Решение:
public class Solution {
private int IpToInt(string ip) {
var parts = ip.Split('.');
return (int.Parse(parts[0]) << 24) + (int.Parse(parts[1]) << 16) +
(int.Parse(parts[2]) << 8) + int.Parse(parts[3]);
}
private string IntToIp(int num) {
return $"{(num >> 24) & 255}.{(num >> 16) & 255}.{(num >> 8) & 255}.{num & 255}";
}
private string Cidr(string ip, int prefixLength) {
return $"{ip}/{prefixLength}";
}
public List<string> FindCidrBlocks(string startIp, int n) {
int start = IpToInt(startIp);
var result = new List<string>();
while (n > 0) {
int maxSize = 1;
while (maxSize <= start && maxSize <= n) {
maxSize <<= 1;
}
maxSize >>= 1;
while (start % maxSize != 0) {
maxSize >>= 1;
}
result.Add(Cidr(IntToIp(start), 32 - BitCount(maxSize - 1) + 1));
start += maxSize;
n -= maxSize;
}
return result;
}
private int BitCount(int n) {
return (int)Math.Log(n, 2) + 1;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
#medium
Задача: 750. Number Of Corner Rectangles
Дан указатель на начало односвязного списка и два целых числа left и right, где left <= right. Необходимо перевернуть узлы списка, начиная с позиции left и заканчивая позицией right, и вернуть измененный список.
Пример:
Input: grid = [[1,0,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[1,0,1,0,1]] Output: 1👨💻 Алгоритм: 1⃣Пройдите по строкам матрицы. Для каждой пары строк, найдите все столбцы, где оба значения равны 1. 2⃣Подсчитайте количество таких столбцов. Если их больше одного, то они образуют прямоугольники. 3⃣Для каждой пары строк добавьте количество возможных прямоугольников в общий счетчик. 😎 Решение:
public class Solution {
public int CountCornerRectangles(int[][] grid) {
int count = 0;
for (int i = 0; i < grid.Length; i++) {
for (int j = i + 1; j < grid.Length; j++) {
int numPairs = 0;
for (int k = 0; k < grid[0].Length; k++) {
if (grid[i][k] == 1 && grid[j][k] == 1) {
numPairs++;
}
}
if (numPairs > 1) {
count += numPairs * (numPairs - 1) / 2;
}
}
}
return count;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
Начните диджитал-карьеру: бесплатные уроки с практикой
Десятки курсов по десяткам профессий: вводные части бесплатно, чтобы определиться.
Попробовать
#реклама
start.practicum.yandex
О рекламодателе
3 290
#medium
Задача: 1286. Iterator for Combination
Создайте класс CombinationIterator:
CombinationIterator(string characters, int combinationLength) Инициализирует объект строкой characters, содержащей отсортированные различные строчные буквы английского алфавита, и числом combinationLength в качестве аргументов.
next() Возвращает следующую комбинацию длины combinationLength в лексикографическом порядке.
hasNext() Возвращает true, если и только если существует следующая комбинация.
Пример:
Input
["CombinationIterator", "next", "hasNext", "next", "hasNext", "next", "hasNext"]
[["abc", 2], [], [], [], [], [], []]
Output
[null, "ab", true, "ac", true, "bc", false]
Explanation
CombinationIterator itr = new CombinationIterator("abc", 2);
itr.next(); // return "ab"
itr.hasNext(); // return True
itr.next(); // return "ac"
itr.hasNext(); // return True
itr.next(); // return "bc"
itr.hasNext(); // return False
👨💻 Алгоритм:
1⃣Сгенерируйте все возможные бинарные битовые маски длины n: от 0 до 2^n - 1.
2⃣Используйте битовые маски с k установленными битами для генерации комбинаций из k элементов. Если n - 1 - j-й бит установлен в битовой маске, это указывает на присутствие символа characters[j] в комбинации и наоборот.
3⃣Теперь у вас есть все заранее вычисленные комбинации. Извлекайте их одну за другой по каждому запросу.
😎 Решение:
using System;
using System.Collections.Generic;
using System.Text;
public class CombinationIterator {
private List<string> combinations;
public CombinationIterator(string characters, int combinationLength) {
combinations = new List<string>();
int n = characters.Length;
int k = combinationLength;
for (int bitmask = 0; bitmask < (1 << n); ++bitmask) {
if (CountBits(bitmask) == k) {
StringBuilder curr = new StringBuilder();
for (int j = 0; j < n; ++j) {
if ((bitmask & (1 << (n - j - 1))) != 0) {
curr.Append(characters[j]);
}
}
combinations.Add(curr.ToString());
}
}
}
public string Next() {
var res = combinations[combinations.Count - 1];
combinations.RemoveAt(combinations.Count - 1);
return res;
}
public bool HasNext() {
return combinations.Count > 0;
}
private int CountBits(int bitmask) {
int count = 0;
while (bitmask != 0) {
count += bitmask & 1;
bitmask >>= 1;
}
return count;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
#easy
Задача: 1287. Element Appearing More Than 25% In Sorted Array
Дан массив целых чисел, отсортированный в неубывающем порядке. В этом массиве есть ровно одно число, которое встречается более чем в 25% случаев. Верните это число.
Пример:
Input: arr = [1,2,2,6,6,6,6,7,10] Output: 6👨💻 Алгоритм: 1⃣Инициализируйте хеш-таблицу counts и перебирайте каждый элемент в массиве arr, увеличивая counts[num] для каждого элемента num. 2⃣Установите target = arr.length / 4. 3⃣Перебирайте каждую пару ключ-значение в counts и, если значение > target, верните ключ. Код никогда не достигнет этой точки, так как гарантируется, что ответ существует; верните любое значение. 😎 Решение:
using System.Collections.Generic;
public class Solution {
public int FindSpecialInteger(int[] arr) {
Dictionary<int, int> counts = new Dictionary<int, int>();
int target = arr.Length / 4;
foreach (int num in arr) {
if (!counts.ContainsKey(num)) {
counts[num] = 0;
}
counts[num]++;
if (counts[num] > target) {
return num;
}
}
return -1;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
UserGate Open Conf 17 / 04 / 2025
⚡ ИТ-конференция про защиту в открытую.
Здесь мы создаем площадку для открытого диалога между заказчиками, партнерами, экспертами и специалистами в сфере продуктов, технологий и услуг информационной безопасности.
Что мы готовим для вас:
- аналитические данные исследования рынка информационной безопасности;
- обзор новых видов и эволюции киберугроз с разбором кейсов по борьбе с ними;
- планы внедрения новых фич и обновлений продуктов экосистемы UserGate;
- 30+ продуктовых, партнерских и клиентских докладов;
- нетворкинг, продуктовые демо, обмен опытом и консультации экспертов ИБ;
- ответы на любые вопросы и сбор обратной связи о работе продуктов и устройств UserGate.
Зарегистрироваться
#реклама
openconf.usergate.com
О рекламодателе
3 290
#easy
Задача: 748. Shortest Completing Word
Вам дан целочисленный массив nums, в котором наибольшее целое число уникально. Определите, является ли наибольший элемент массива по крайней мере в два раза больше всех остальных чисел в массиве. Если да, то верните индекс самого большого элемента, в противном случае верните -1.
Пример:
Input: licensePlate = "1s3 PSt", words = ["step","steps","stripe","stepple"] Output: "steps"👨💻 Алгоритм: 1⃣Извлечь все буквы из licensePlate, игнорируя цифры и пробелы, и создать словарь для подсчета частоты каждой буквы. 2⃣Пройти по массиву words, проверяя каждое слово на соответствие требованиям. 3⃣Найти самое короткое завершающее слово среди подходящих. 😎 Решение:
using System;
using System.Collections.Generic;
public class Solution {
public string ShortestCompletingWord(string licensePlate, string[] words) {
var licenseCount = GetCharCount(licensePlate);
string result = null;
foreach (var word in words) {
if (IsCompletingWord(word, licenseCount)) {
if (result == null || word.Length < result.Length) {
result = word;
}
}
}
return result;
}
private Dictionary<char, int> GetCharCount(string s) {
var count = new Dictionary<char, int>();
foreach (var c in s.ToLower()) {
if (char.IsLetter(c)) {
count[c] = count.GetValueOrDefault(c, 0) + 1;
}
}
return count;
}
private bool IsCompletingWord(string word, Dictionary<char, int> licenseCount) {
var wordCount = new Dictionary<char, int>();
foreach (var c in word) {
wordCount[c] = wordCount.GetValueOrDefault(c, 0) + 1;
}
foreach (var entry in licenseCount) {
if (!wordCount.ContainsKey(entry.Key) || wordCount[entry.Key] < entry.Value) {
return false;
}
}
return true;
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
Прокачаем ваш скилл по Java с junior до middle
Научим писать код, который не стыдно показать
Личный наставник. Актуальная программа. Попробуй!
Узнать больше
#реклама 16+
ykul.ru
О рекламодателе
3 290
#easy
Задача: 747. Largest Number At Least Twice of Others
Вам дан целочисленный массив nums, в котором наибольшее целое число уникально. Определите, является ли наибольший элемент массива по крайней мере в два раза больше всех остальных чисел в массиве. Если да, то верните индекс самого большого элемента, в противном случае верните -1.
Пример:
Input: nums = [3,6,1,0] Output: 1👨💻 Алгоритм: 1⃣Найдите максимальный элемент в массиве и его индекс. 2⃣Проверьте, является ли этот максимальный элемент по крайней мере в два раза больше всех остальных элементов массива. 3⃣Если условие выполняется, верните индекс максимального элемента, иначе верните -1. 😎 Решение:
public class Solution {
public int MinCostClimbingStairs(int[] cost) {
int n = cost.Length;
int[] dp = new int[n];
dp[0] = cost[0];
dp[1] = cost[1];
for (int i = 2; i < n; i++) {
dp[i] = cost[i] + Math.Min(dp[i - 1], dp[i - 2]);
}
return Math.Min(dp[n - 1], dp[n - 2]);
}
}
Ставь 👍 и забирай 📚 Базу знаний3 290
Не дайте киберугрозам испортить детство вашему ребёнку
37% детей сталкивались с опасностями в интернете, включая кибербуллинг, финансовые угрозы и неприемлемый контент.
40% детей раскрывают в интернете конфиденциальную информацию, включая домашний адрес.
Большинство родителей не всегда могут найти время, чтобы следить за действиями детей в интернете.
Вы уверены, что Ваш ребёнок вне зоны риска?
На бесплатном вебинаре для родителей эксперты из Университета Иннополис дают практические рекомендации:
⚡как предотвратить кибербуллинг, фишинг и другие формы интернет-угроз,
⚡какие правила необходимо соблюдать для безопасного общения в интернете.
Запишитесь на онлайн-встречу и обеспечьте своему ребенку безопасное цифровое пространство!
Регистрируйтесь, количество мест ограничено!
Записаться
#реклама 16+
progmatica.innopolis.university
О рекламодателе
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
