es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

Golang | LeetCode

Golang | LeetCode

Ir al canal en Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

Mostrar más
3 522
Suscriptores
Sin datos24 horas
-177 días
-5930 días
Atraer Suscriptores
nov '26
noviembre '26
+2
en 0 canales
octubre '26
+13
en 0 canales
Get PRO
septiembre '26
+19
en 0 canales
Get PRO
agosto '26
+22
en 0 canales
Get PRO
julio '26
+49
en 0 canales
Get PRO
junio '26
+22
en 1 canales
Get PRO
mayo '26
+13
en 0 canales
Get PRO
abril '26
+21
en 0 canales
Get PRO
marzo '26
+30
en 0 canales
Get PRO
febrero '26
+26
en 0 canales
Get PRO
enero '26
+31
en 0 canales
Get PRO
diciembre '25
+36
en 0 canales
Get PRO
noviembre '25
+123
en 1 canales
Get PRO
octubre '25
+170
en 1 canales
Get PRO
septiembre '25
+97
en 0 canales
Get PRO
agosto '25
+156
en 0 canales
Get PRO
julio '25
+162
en 1 canales
Get PRO
junio '25
+153
en 0 canales
Get PRO
mayo '25
+149
en 0 canales
Get PRO
abril '25
+197
en 0 canales
Get PRO
marzo '25
+320
en 2 canales
Get PRO
febrero '25
+194
en 0 canales
Get PRO
enero '25
+342
en 53 canales
Get PRO
diciembre '24
+166
en 0 canales
Get PRO
noviembre '24
+133
en 1 canales
Get PRO
octubre '24
+273
en 13 canales
Get PRO
septiembre '24
+809
en 329 canales
Get PRO
agosto '24
+127
en 0 canales
Get PRO
julio '24
+671
en 219 canales
Get PRO
junio '24
+756
en 232 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
04 noviembre0
03 noviembre+2
02 noviembre0
01 noviembre0
Publicaciones del Canal
🔥 Скрытые вакансии с удаленной работой для Golang разработчика, которые нигде больше не публикуются. Напрямую от компаний, с
🔥 Скрытые вакансии с удаленной работой для Golang разработчика, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров. 🔹 Golang Go Jobs | Вакансии 🔸 Все каналы с вакансиями

2
Задача: 1315. Sum of Nodes with Even-Valued Grandparent Сложность: medium Given the root of a binary tree, return the sum of values of nodes with an even-valued grandparent. If there are no nodes with an even-valued grandparent, return 0. A grandparent of a node is the parent of its parent if it exists. Пример: Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] Output: 18 Explanation: The red nodes are the nodes with even-value grandparent while the blue nodes are the even-value grandparents. 👨‍💻 Алгоритм: 1⃣Определите метод solve(), который принимает TreeNode root, значение родителя parent и значение бабушки или дедушки gParent. Этот метод возвращает сумму значений узлов с четным значением бабушки и дедушки в поддереве узла root. Если root равен null, верните 0 как сумму. 2⃣Рекурсивно пройдите по левому и правому дочерним узлам, передавая в качестве значения parent root, а в качестве значения gParent parent. Если значение gParent четное, добавьте значение root к ответу. 3⃣Вызовите рекурсивную функцию solve() с корневым узлом и значениями -1 для parent и gParent. Верните сумму для левого и правого дочерних узлов и значение для текущего узла. 😎 Решение func solve(root *TreeNode, parent, gParent int) int { if root == nil { return 0 } return solve(root.Left, root.Val, parent) + solve(root.Right, root.Val, parent) + func() int { if gParent%2 == 0 { return root.Val } return 0 }() } func sumEvenGrandparent(root *TreeNode) int { return solve(root, -1, -1) } Ставь 👍 и забирай 📚 Базу знаний
160
3
🎓 Тестовый собес с CTO Reactive Apps [+ эталонные ответы на 50 сложных вопросов в подарок] В четверг, 5 ноября, в 19:00 мск
🎓 Тестовый собес с CTO Reactive Apps [+ эталонные ответы на 50 сложных вопросов в подарок] В четверг, 5 ноября, в 19:00 мск приходи онлайн на открытый Go-собес. Увидишь, как проверяют технические знания кандидатов, и сможешь оценить свою готовность к такому формату. 👤 Интервьюер: Дима Дорофеев, CTO Reactive Apps Как всё будет: 📂 Дима проведёт собес с разработчиком-добровольцем и предложит ему вопросы и задачи из реальных технических интервью. Участник не будет знать их заранее 📂 После каждого ответа разберёт его сильные и слабые стороны и объяснит, что важно для интервьюера 📂 В конце сможешь задать Диме свои вопросы и получить развёрнутые ответы Эфир проходит в рамках менторской программы ШОРТКАТ для Go-разработчиков, которые хотят сменить работу, вырасти в грейде и зарплате 🎁 За регистрацию подарим файл с эталонными ответами на 50 сложных вопросов с Go-собеседований Переходи в бота, чтобы зарегистрироваться на эфир и забрать подарок 👉 @shortcut_go_bot Реклама. О рекламодателе.
163
4
Задача: 1036. Escape a Large Maze Сложность: hard Имеется сетка размером 1 миллион на 1 миллион на плоскости XY, координаты каждого квадрата сетки - (x, y). Мы начинаем с исходного квадрата = [sx, sy] и хотим достичь цели = [tx, ty]. Существует также массив заблокированных квадратов, где каждый заблокированный[i] = [xi, yi] представляет собой заблокированный квадрат с координатами (xi, yi). Каждый ход мы можем пройти один квадрат на север, восток, юг или запад, если квадрат не находится в массиве заблокированных квадратов. Нам также не разрешается выходить за пределы сетки. Возвращается true тогда и только тогда, когда можно достичь целевого квадрата из исходного квадрата с помощью последовательности правильных ходов. Пример: Input: blocked = [[0,1],[1,0]], source = [0,0], target = [0,2] Output: false 👨‍💻 Алгоритм: 1⃣Обработка входных данных: Загрузите координаты исходного квадрата sx, sy, целевого квадрата tx, ty и список заблокированных квадратов blocked. 2⃣Проверка простого случая: Если список blocked пуст, верните true, так как путь не будет заблокирован. Проверка начальной или целевой клетки: Если исходная или целевая клетка заблокированы, верните false. 3⃣Поиск пути с использованием BFS или DFS: Используйте алгоритм поиска в ширину (BFS) или поиска в глубину (DFS) для поиска пути от sx, sy до tx, ty, избегая заблокированных клеток. Если обнаружен путь, верните true, в противном случае верните false. 😎 Решение: func isEscapePossible(blocked [][]int, source []int, target []int) bool { blockedSet := make(map[[2]int]struct{}) for _, b := range blocked { blockedSet[[2]int{b[0], b[1]}] = struct{}{} } src := [2]int{source[0], source[1]} tgt := [2]int{target[0], target[1]} if _, found := blockedSet[src]; found || _, found := blockedSet[tgt]; found { return false } directions := [][2]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}} maxArea := len(blocked) * (len(blocked) - 1) / 2 bfs := func(start, end [2]int) bool { queue := [][2]int{start} visited := map[[2]int]struct{}{start: {}} for len(queue) > 0 { if len(visited) > maxArea { return true } cur := queue[0] queue = queue[1:] for _, dir := range directions { next := [2]int{cur[0] + dir[0], cur[1] + dir[1]} if next[0] >= 0 && next[0] < 1_000_000 && next[1] >= 0 && next[1] < 1_000_000 { if _, found := visited[next]; !found { if _, found := blockedSet[next]; !found { if next == end { return true } queue = append(queue, next) visited[next] = struct{}{} } } } } } return false } return bfs(src, tgt) && bfs(tgt, src) } Ставь 👍 и забирай 📚 Базу знаний
149
5
🚨 40 минут Пожизненный PRO по цене года закрывается прямо сейчас. Это последнее напоминание. 👉 https://easyoffer.ru/pro
🚨 40 минут Пожизненный PRO по цене года закрывается прямо сейчас. Это последнее напоминание. 👉 https://easyoffer.ru/pro
120
6
🎃 3 часа до полуночи... Ровно в 00:00 предложение исчезнет, как призрак на рассвете 👻 Последний шанс забрать PRO навсегда п
🎃 3 часа до полуночи... Ровно в 00:00 предложение исчезнет, как призрак на рассвете 👻 Последний шанс забрать PRO навсегда по цене одного года. Без продлений и без воскрешений. Если откладывал — не дай этой возможности стать твоим ночным кошмаром 🦇 👉 https://easyoffer.ru/pro
119
7
Задача: 746. Min Cost Climbing Stairs Сложность: easy Вам дан целочисленный массив cost, где cost[i] - стоимость i-й ступеньки на лестнице. После оплаты стоимости вы можете подняться на одну или две ступеньки. Вы можете начать со ступеньки с индексом 0 или со ступеньки с индексом 1. Верните минимальную стоимость достижения вершины этажа. Пример: Input: cost = [10,15,20] Output: 15 👨‍💻 Алгоритм: 1⃣Создать массив dp, где dp[i] хранит минимальную стоимость достижения i-й ступеньки. 2⃣Инициализировать dp[0] и dp[1] как cost[0] и cost[1] соответственно. Заполнить dp используя минимальную стоимость подъема с предыдущих ступенек. 3⃣Вернуть минимальную стоимость достижения вершины. 😎 Решение: package main func minCostClimbingStairs(cost []int) int { n := len(cost) dp := make([]int, n) copy(dp, cost) for i := 2; i < n; i++ { dp[i] += min(dp[i-1], dp[i-2]) } return min(dp[n-1], dp[n-2]) } func min(a, b int) int { if a < b { return a } return b } Ставь 👍 и забирай 📚 Базу знаний
226
8
🕯 Страшилка на ночь Год спустя. Финальный этап собеседования. В комнате становится холодно. Интервьюер медленно наклоняется
🕯 Страшилка на ночь Год спустя. Финальный этап собеседования. В комнате становится холодно. Интервьюер медленно наклоняется и шепчет: «Почему вы ушли с прошлого места работы?» Ты открываешь easyoffer, а там… «Ваша подписка истекла» 💀 Чтобы эта история не стала твоей, забери пожизненный PRO по цене одного года. База собесов, эталонные ответы, автоотклики, тренажёры и всё, что появится дальше, остаются с тобой навсегда. ⏳ Осталось 7 часов. В полночь предложение исчезнет. 👉 https://easyoffer.ru/pro
124
9
⏳ Сегодня последний день Платишь один раз и забираешь весь easyoffer навсегда, вместе со всеми будущими фичами проекта. Никак
⏳ Сегодня последний день Платишь один раз и забираешь весь easyoffer навсегда, вместе со всеми будущими фичами проекта. Никаких ежегодных продлений, только ты, твой оффер и мешок конфет 🍭 🎃 Завтра цена вернётся к обычной, и такого угощения уже не будет. 👉 https://easyoffer.ru/pro
122
10
Задача: 848. Shifting Letters Сложность: medium Вам дана строка s из строчных букв английского алфавита и целочисленный массив shifts такой же длины. Назовем shift() буквы следующей буквой в алфавите (с переходом так, что 'z' становится 'a'). Например, shift('a') = 'b', shift('t') = 'u', и shift('z') = 'a'. Теперь для каждого shifts[i] = x мы хотим сдвинуть первые i + 1 букв строки s на x раз. Верните итоговую строку после применения всех таких сдвигов к s. Пример: Input: s = "abc", shifts = [3,5,9] Output: "rpl" Explanation: We start with "abc". After shifting the first 1 letters of s by 3, we have "dbc". After shifting the first 2 letters of s by 5, we have "igc". After shifting the first 3 letters of s by 9, we have "rpl", the answer. 👨‍💻 Алгоритм: 1⃣Вычислите общее количество сдвигов для всех символов строки, используя массив shifts. 2⃣Пройдите по строке s и примените вычисленные сдвиги к каждому символу, начиная с первого и уменьшая количество сдвигов на текущем шаге. 3⃣Постройте и верните итоговую строку после всех сдвигов. 😎 Решение: func shiftingLetters(s string, shifts []int) string { totalShifts := 0 for _, shift := range shifts { totalShifts = (totalShifts + shift) % 26 } result := make([]byte, len(s)) for i := 0; i < len(s); i++ { newCharValue := (int(s[i]-'a') + totalShifts) % 26 result[i] = byte(newCharValue + 'a') totalShifts = (totalShifts - shifts[i] + 26) % 26 } return string(result) } Ставь 👍 и забирай 📚 Базу знаний
204
11
Задача: 509. Fibonacci Number Сложность: easy Числа Фибоначчи, обычно обозначаемые как F(n), образуют последовательность, называемую последовательностью Фибоначчи, так что каждое число является суммой двух предыдущих, начиная с 0 и 1. То есть, F(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), для n > 1. Дано n, вычислите F(n). Пример: Input: n = 3 Output: 2 Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2. 👨‍💻 Алгоритм: 1⃣Проверка начального условия Если N <= 1, вернуть N. 2⃣Инициализация переменных Инициализируйте current значением 0. Инициализируйте prev1 значением 1, что будет представлять fib(N-1) при вычислении текущего значения. Инициализируйте prev2 значением 0, что будет представлять fib(N-2) при вычислении текущего значения. 3⃣Итерация и вычисление Итерация от 2 до N включительно. На каждой итерации: установите current как сумму prev1 и prev2. Обновите prev2 значением prev1. Обновите prev1 значением current. Вернуть значение current после завершения итерации. 😎 Решение: func fib(N int) int { if N <= 1 { return N } current, prev1, prev2 := 0, 1, 0 for i := 2; i <= N; i++ { current = prev1 + prev2 prev2 = prev1 prev1 = current } return current } Ставь 👍 и забирай 📚 Базу знаний
203
12
Пожизненный PRO — по цене одного года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ
Пожизненный PRO — по цене одного года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ закроет 99% проблем на пути к офферу: 1. 1100+ записей реальных собеседований (включая топы: Сбер, Авито, Яндекс, WB, OZON, МТС). Видите всё изнутри: как спрашивают, как отвечают сильные кандидаты и на каких ошибках проваливаются 80%. 2. База live-coding задач и вопросов с реальных собесов — с уникальной системой вероятности их встречи. Готовитесь не вслепую, а точечно по темам, которые спрашивают чаще всего. 3. Эталонные ответы от Senior-разработчиков. Никакой воды и догадок — только чёткие структурированные решения, за которые дают «зелёный свет» к офферу. 4. Полный доступ ко всем грейдам и профессиям. Junior вы или Senior, тестировщик, разработчик или проджект — вы получаете ВСЕ материалы easyoffer без ограничений. Безлимитно, Все, Навсегда. 5. База 400+ тестовых заданий. Прокачивайте навыки на реальных задачах — тех самых, что дают перед собесом. 6. Автоотклики на hh — пока вы спите, резюме уходит рекрутерам автоматически. Экономия сотен часов ручного кликанья. 7. Аналитика ТОП-требований из вакансий. Парсим рынок и показываем, какие скиллы сейчас в цене. Апгрейдите резюме точечно и проходите ATS-фильтры (они отсеивают до 75% резюме ещё до рекрутера). 8. Генератор резюме и CV под каждую вакансию. Забудьте про «универсальное» резюме — нейросеть адаптирует ваш опыт под конкретную позицию за минуту и повышает шансы на приглашение в разы. 9. Тренажёры подготовки к собеседованию: «Реальное собеседование» — сценарий вопросов из настоящих интервью. «Проработка вопросов» — флеш-карточки по методике интервальных повторений (как Anki) 10. 🔥 Самое важное: все будущие фичи Вы платите один раз, а продукт растёт всю жизнь. Каждое обновление, каждый новый инструмент, каждая фича, которая появится за все годы проекта, автоматически падает вам в подписку без доплат. Вы фиксируете цену года, а получаете продукт, который через пару лет будет стоить в разы дороже ⭐️ Это уникальная акция пока сайт в режиме Beta. Успей ей воспользоваться ⏳ Завтра последний день. 👉 https://easyoffer.ru/pro
142
13
Задача: 1512. Number of Good Pairs Сложность: easy Дан массив целых чисел nums, верните количество хороших пар. Пара (i, j) называется хорошей, если nums[i] == nums[j] и i < j. Пример: Input: nums = [1,2,3,1,1,3] Output: 4 Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed. 👨‍💻 Алгоритм: 1⃣Инициализируйте переменную ans значением 0. 2⃣Итерируйте i от 0 до nums.length: Итерируйте j от i + 1 до nums.length: Если nums[i] == nums[j], увеличьте ans на 1. 3⃣Верните ans. 😎 Решение func numIdenticalPairs(nums []int) int {     ans := 0     for i := 0; i < len(nums); i++ {         for j := i + 1; j < len(nums); j++ {             if nums[i] == nums[j] {                 ans++             }         }     }     return ans } Ставь 👍 и забирай 📚 Базу знаний
192
14
Задача: 755. Pour Water Сложность: medium Вам дана карта высот, представленная в виде целочисленного массива 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, пока не будет добавлен весь объем воды. 😎 Решение: package main func pourWater(heights []int, volume int, k int) []int { for v := 0; v < volume; v++ { dropIndex := k for _, d := range []int{-1, 1} { i := k for i+d >= 0 && i+d < len(heights) && heights[i+d] <= heights[i] { if heights[i+d] < heights[i] { dropIndex = i + d } i += d } if dropIndex != k { break } } heights[dropIndex]++ } return heights } Ставь 👍 и забирай 📚 Базу знаний
189
15
🧿 Осталось 3 дня, чтобы забрать оберег! Пожизненный easyoffer PRO по цене одного года. Надеваешь один раз и защищён всю жизн
🧿 Осталось 3 дня, чтобы забрать оберег! Пожизненный easyoffer PRO по цене одного года. Надеваешь один раз и защищён всю жизнь 🎃 От чего защищает оберег: 1. Вопросы и задачи с реальных собеседований в конкретных компаниях — от сюрпризов на собесе 2. Лучшие ответы и видео-примеры от middle/senior специалистов — от ответов уровня джуна 3. Записи реальных собеседований — от страха неизвестности 4. Обход фильтров ATS с топ-30 ключевых слов в резюме — от автоотказов, пришедших из темноты в 3 часа ночи 5. Автоотклики на hh — от бесконечных часов ручных откликов 6. Тренажёры и симуляторы — от дрожи в голосе перед интервьюером 👻 ⏳ Акция действует только до 31 октября 23:59 по МСК 👉 Забрать оберег со скидкой 70%: https://easyoffer.ru/pro
149
16
Задача: 163. Missing Ranges Сложность: easy Вам дан диапазон [lower, upper] и отсортированный массив уникальных целых чисел nums, где все элементы находятся в этом диапазоне. Число x считается пропущенным, если оно находится в диапазоне [lower, upper] и его нет в массиве nums. Верните кратчайший отсортированный список диапазонов, который точно покрывает все пропущенные числа. То есть ни один элемент из nums не включен в какой-либо из диапазонов, и каждое пропущенное число покрыто одним из диапазонов.. Пример: Input: nums = [-1], lower = -1, upper = -1 Output: [] Explanation: There are no missing ranges since there are no missing numbers. 👨‍💻 Алгоритм: 1⃣Инициализация и проверка начальных условий: Создайте переменную n и инициализируйте её размером массива nums. Создайте список missingRanges, который будет содержать решение задачи. Если массив nums пуст, верните диапазон [lower, upper]. Проверьте, совпадает ли первый элемент массива с lower. Если lower < nums[0], добавьте в missingRanges диапазон [lower, nums[0] - 1]. 2⃣Итерация по элементам массива: Проитерируйте по всем элементам в nums с помощью цикла от i = 0 до n - 2 (до предпоследнего элемента): Если текущий элемент nums[i] и следующий элемент nums[i + 1] отличаются на 1 или меньше, между этими двумя числами нет пропущенных чисел. В противном случае, если nums[i + 1] - nums[i] > 1, то пропущены числа от nums[i] + 1 до nums[i + 1] - 1 (включительно). В этом случае диапазон [nums[i] + 1, nums[i + 1] - 1] добавляется в missingRanges. 3⃣Проверка и добавление последнего пропущенного диапазона: Проверьте, совпадает ли последний элемент массива с upper. Если nums[n - 1] < upper, добавьте в missingRanges диапазон [nums[n - 1] + 1, upper]. 😎 Решение: func findMissingRanges(nums []int, lower int, upper int) [][]int { n := len(nums) missingRanges := make([][]int, 0) if n == 0 { missingRanges = append(missingRanges, []int{lower, upper}) return missingRanges if lower < nums[0] { missingRanges = append(missingRanges, []int{lower, nums[0] - 1}) } for i := 0; i < n-1; i++ { if nums[i+1]-nums[i] <= 1 { continue } missingRanges = append(missingRanges, []int{nums[i] + 1, nums[i+1] - 1}) } if upper > nums[n-1] { missingRanges = append(missingRanges, []int{nums[n-1] + 1, upper}) } return missingRanges } Ставь 👍 и забирай 📚 Базу знаний
190
17
Задача: 689. Maximum Sum of 3 Non-Overlapping Subarrays Сложность: hard Дан целочисленный массив nums и целое число k. Найдите три непересекающихся подмассива длины k с максимальной суммой и верните их. Верните результат в виде списка индексов, представляющих начальную позицию каждого интервала (нумерация с 0). Если существует несколько ответов, верните лексикографически наименьший. Пример: Input: nums = [1,2,1,2,6,7,5,1], k = 2 Output: [0,3,5] Explanation: Subarrays [1, 2], [2, 6], [7, 5] correspond to the starting indices [0, 3, 5]. We could have also taken [2, 1], but an answer of [1, 3, 5] would be lexicographically larger. 👨‍💻 Алгоритм: 1⃣Предположим, что фиксирован j. Нам нужно узнать на интервалах i∈[0,j−k] и l∈[j+k,len(W)−1], где наибольшее значение W[i] (и соответственно W[l]) встречается первым (то есть, с наименьшим индексом). 2⃣Мы можем решить эту задачу с помощью динамического программирования. Например, если мы знаем, что i - это место, где наибольшее значение W[i] встречается первым на [0,5], то на [0,6] первое появление наибольшего W[i] должно быть либо i, либо 6. Если, скажем, 6 лучше, тогда мы устанавливаем best = 6. В конце left[z] будет первым вхождением наибольшего значения W[i] на интервале i∈[0,z], а right[z] будет таким же, но на интервале i∈[z,len(W)−1]. 3⃣Это означает, что для некоторого выбора j, кандидат на ответ должен быть (left[j - k], j, right[j + k]). Мы выбираем кандидата, который дает максимальное значение W[i] + W[j] + W[l]. 😎 Решение: package main func maxSumOfThreeSubarrays(nums []int, k int) []int { W := make([]int, len(nums)-k+1) currSum := 0 for i := 0; i < len(nums); i++ { currSum += nums[i] if i >= k { currSum -= nums[i-k] } if i >= k-1 { W[i-k+1] = currSum } } left := make([]int, len(W)) best := 0 for i := 0; i < len(W); i++ { if W[i] > W[best] { best = i } left[i] = best } right := make([]int, len(W)) best = len(W) - 1 for i := len(W) - 1; i >= 0; i-- { if W[i] >= W[best] { best = i } right[i] = best } ans := []int{-1, -1, -1} for j := k; j < len(W)-k; j++ { i, l := left[j-k], right[j+k] if ans[0] == -1 || W[i]+W[j]+W[l] > W[ans[0]]+W[ans[1]]+W[ans[2]] { ans[0], ans[1], ans[2] = i, j, l } } return ans } Ставь 👍 и забирай 📚 Базу знаний
168
18
Задача: 1150. Check If a Number Is Majority Element in a Sorted Array Сложность: easy Дан целочисленный массив nums, отсортированный в неубывающем порядке, и целое число target. Верните true, если target является элементом большинства, или false в противном случае. Элемент большинства в массиве nums — это элемент, который встречается в массиве более чем nums.length / 2 раз. Пример: Input: nums = [2,4,5,5,5,5,5,6,6], target = 5 Output: true Explanation: The value 5 appears 5 times and the length of the array is 9. Thus, 5 is a majority element because 5 > 9/2 is true. 👨‍💻 Алгоритм: 1⃣Инициализация переменной count: Инициализируйте переменную count значением 0.. 2⃣ Итерация по списку nums: Пройдите по каждому элементу списка nums. Если элемент num равен target, увеличьте значение переменной count. 3⃣Проверка условия мажоритарного элемента: Если count больше чем половина длины списка nums, верните true. В противном случае верните false. 😎 Решение: package main func isMajorityElement(nums []int, target int) bool { count := 0 for _, num := range nums { if num == target { count++ } } return count > len(nums)/2 } Ставь 👍 и забирай 📚 Базу знаний
180
19
🎃 Хеллоуинская акция на easyoffer В честь Хеллоуина до 31 октября можно забрать PRO навсегда. Покупаешь один раз и пользуешь
🎃 Хеллоуинская акция на easyoffer В честь Хеллоуина до 31 октября можно забрать PRO навсегда. Покупаешь один раз и пользуешься всю жизнь 🍬Что внутри мешка с угощениями: – База вопросов и задач из собеседований – Примеры видео-ответов на вопросы – Записи реальных собеседований – Тренажёры «Проработка вопросов» и «Реальное собеседование» – Аналитика требований из вакансий – Автоотклики на вакансии 👉 Забрать PRO со скидкой 70%: https://easyoffer.ru/pro
150
20
Задача: 139. Word Break Сложность: medium Дана строка s и словарь строк wordDict. Верните true, если строку s можно разделить на последовательность одного или нескольких слов из словаря, разделённых пробелами. Обратите внимание, что одно и то же слово из словаря может использоваться несколько раз при разделении. Пример: Input: s = "leetcode", wordDict = ["leet","code"] Output: true Explanation: Return true because "leetcode" can be segmented as "leet code". 👨‍💻 Алгоритм: 1⃣Инициализация структур данных: Преобразуйте wordDict в множество words для быстрой проверки вхождения. Инициализируйте очередь queue начальным значением 0 (индекс начала строки) и множество seen для отслеживания посещённых индексов. 2⃣Обход в ширину (BFS): Пока очередь не пуста, извлекайте первый элемент из очереди, обозначающий начальную позицию start. Если start равен длине строки s, возвращайте true, так как достигнут конец строки, и строку можно разделить на слова из словаря. Итерируйте end от start + 1 до s.length включительно. Для каждого end, проверьте, посещён ли он уже. 3⃣Проверка подстроки и обновление структур: Проверьте подстроку начиная с start и заканчивая перед end. Если подстрока находится в множестве words, добавьте end в очередь и отметьте его в seen как посещённый. Если BFS завершается и конечный узел не достигнут, возвращайте false. 😎 Решение: func wordBreak(s string, wordDict []string) bool { words := make(map[string]bool) queue := make([]int, 0) seen := make([]bool, len(s)+1) for _, word := range wordDict { words[word] = true } queue = append(queue, 0) for len(queue) > 0 { start := queue[0] queue = queue[1:] if start == len(s) { return true } for end := start + 1; end <= len(s); end++ { if seen[end] { continue } if _, ok := words[s[start:end]]; ok { queue = append(queue, end) seen[end] = true } } } return false } Ставь 👍 и забирай 📚 Базу знаний
192