Ответ в программированье на 3 4 5 6 7 8 9 10 уровень

2 Фев в 19:40
38 +1
0
Ответы
1
Ниже — краткие задачи и компактные решения на Python для уровней 333–101010. К каждому уровню — задача, код и сложность.
Уровень 333 — сумма массива
Задача: вернуть сумму элементов.
Код:
def sum_arr(a):
return sum(a)
Сложность: O(n)O(n)O(n).
Уровень 444 — количество различных элементов
Задача: вернуть число уникальных элементов.
Код:
def count_unique(a):
return len(set(a))
Сложность: O(n)O(n)O(n).
Уровень 555 — Two Sum (пара с заданной суммой)
Задача: найти индексы двух чисел с суммой target.
Код:
def two_sum(a, target):
seen = {}
for i, x in enumerate(a):
need = target - x
if need in seen:
return (seen[need], i)
seen[x] = i
return None
Сложность: O(n)O(n)O(n).
Уровень 666 — бинарный поиск
Задача: найти индекс элемента в отсортированном массиве.
Код:
def binary_search(a, x):
l, r = 0, len(a) - 1
while l <= r:
m = (l + r) // 2
if a[m] == x: return m
if a[m] < x: l = m + 1
else: r = m - 1
return -1
Сложность: O(log⁡n)O(\log n)O(logn).
Уровень 777 — группировка анаграмм
Задача: сгруппировать слова-анagramмы.
Код:
from collections import defaultdict
def group_anagrams(words):
d = defaultdict(list)
for w in words:
d[''.join(sorted(w))].append(w)
return list(d.values())
Сложность: O(nklog⁡k)O(n k \log k)O(nklogk) (где kkk — средняя длина слова).
Уровень 888 — топологическая сортировка (Kahn)
Задача: топологическая сортировка ориентированного ацикличного графа (вернуть None при цикле).
Код:
from collections import deque
def topo_sort(n, edges):
g = [[] for _ in range(n)]
indeg = [0]*n
for u, v in edges:
g[u].append(v); indeg[v] += 1
q = deque([i for i in range(n) if indeg[i] == 0])
res = []
while q:
u = q.popleft(); res.append(u)
for v in g[u]:
indeg[v] -= 1
if indeg[v] == 0: q.append(v)
return res if len(res) == n else None
Сложность: O(n+m)O(n + m)O(n+m) (где mmm — число рёбер).
Уровень 999 — Dijkstra (кратчайшие пути с неотрицательными весами)
Задача: расстояния от источника в взвешенном графе.
Код:
import heapq
def dijkstra(n, adj, src):
dist = [float('inf')]*n
dist[src] = 0
pq = [(0, src)]
while pq:
d, u = heapq.heappop(pq)
if d > dist[u]: continue
for v, w in adj[u]:
nd = d + w
if nd < dist[v]:
dist[v] = nd
heapq.heappush(pq, (nd, v))
return dist
Сложность: O((n+m)log⁡n)O((n + m)\log n)O((n+m)logn).
Уровень 101010 — Edmonds–Karp (максимальный поток)
Задача: найти максимальный поток между s и t.
Код:
from collections import deque
def edmonds_karp(n, edges, s, t):
cap = [[0]*n for _ in range(n)]
g = [[] for _ in range(n)]
for u, v, c in edges:
cap[u][v] += c
g[u].append(v); g[v].append(u)
flow = 0
while True:
q = deque([s]); parent = [-1]*n; parent[s] = s
while q and parent[t] == -1:
u = q.popleft()
for v in g[u]:
if parent[v] == -1 and cap[u][v] > 0:
parent[v] = u; q.append(v)
if parent[t] == -1: break
f = float('inf'); v = t
while v != s:
u = parent[v]; f = min(f, cap[u][v]); v = u
v = t
while v != s:
u = parent[v]
cap[u][v] -= f
cap[v][u] += f
v = u
flow += f
return flow
Сложность: O(VE2)O(V E^2)O(VE2).
Если нужен конкретный язык, вход/выход или тесты — уточните.
2 Фев в 19:45
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир