Февраль 2025
- Задача
# Найти все пары чисел из списка, сумма которых равна заданному числу.
# В исходном списке повторов нет.
# numbers = [2, 5, 7, 1, 9, 1253436263, 3, 4, 21, 8, 6]
# k = 7
# -> [(2, 5), (1, 6), (3, 4)]
# numbers = [5, 1, 4, 7, 6]
# k = 8
# -> [(7, 1)]
#set чтобы хранить просмотренные числа
#1- пройдем по списку и для каждого числа num проверяем есть ли в увиденных второе число k-num
#2- если есть добавим в ответ
#3- добавляем текущее число в просмотренные чтобы не проверять снова
def find_pairs(numbers):
seen = set()
result = []
for num in numbers:
pair = k-num
if pair in seen:
result.append(pair,num)
else:
seen.add(num)
return result
numbers = [2, 5, 7, 1, 9, 1253436263, 3, 4, 21, 8, 6]
k=7 - Задача
# Есть двумерный массив целых чисел, в каждой ячейке записан номер цвета.
# На вход подаются координаты точки и её новый цвет. Надо перекрасить смежную с данной точкой область также в новый цвет.
# 0 1 1 3
# 4 3 3 2
# 0 3 2 3
# 4 3 1 2
# (1,1) -> 4
# 0 1 1 3
# 4 4 4 2
# 0 4 2 3
# 4 4 1 2
#O(n*m)
#O(1)
# 3 3
# 3 3
# (0,0) -> 4
from collections import deque
def flood_fill(grid, x, y, new_color):
rows, cols = len(grid), len(grid[0])
original_color = grid[x][y]
if original_color == new_color:
return
queue = deque([(x, y)])
grid[x][y] = new_color
directions =. [(-1,0),(1,0),(0,-1),(0,1)]
while queue:
i,j = queue.popleft() #элемент из очереди
#перекраска
for di, dj in directions:
ni,nj = i + di, j + dj
if 0 <=ni < rows and 0 <= nj < cols and grid[ni][nj] == original_color:
grid[ni][nj] = new_color
queue.append((ni,nj))
grid = [
[0, 1, 1, 3],
[4, 3, 3, 2],
[0, 3, 2, 3],
[4, 3, 1, 2]
]
flood_fill(grid,1, 1, 4)
for row in grid:
print(row)