Программа курса:
Разбор задачи: Количество прямоугольников, из которых может образоваться самый большой квадрат
Предложенный нами код решения:
def countGoodRectangles(rectangles):
"""
Возвращает количество прямоугольников, из которых можно вырезать квадрат с наибольшей возможной стороной.
:param rectangles: список прямоугольников, каждый представленный как [длина, ширина]
:return: количество прямоугольников, из которых можно вырезать квадрат с максимальной стороной
"""
# Находим максимальную сторону квадрата, который можно вырезать
max_len = max(min(l, w) for l, w in rectangles)
# Считаем, сколько прямоугольников могут вырезать квадрат с максимальной стороной
count = sum(1 for l, w in rectangles if min(l, w) == max_len)
return countЗадача заключается в том, чтобы для каждого прямоугольника найти наибольший квадрат, который можно из него вырезать. Мы должны вычислить количество прямоугольников, которые могут вырезать квадрат с максимальной стороной.
Разбор каждого фрагмента:
Находим максимальную сторону квадрата, который можно вырезать:
max_len = max(min(l, w) for l, w in rectangles)- Мы используем функцию
min(l, w)для каждого прямоугольника в спискеrectangles. Это дает нам максимальную возможную сторону квадрата, который можно вырезать из данного прямоугольника. Например, если прямоугольник имеет размер [5, 8], то максимальная сторона квадрата, который можно вырезать, будет 5, так как одна сторона квадрата не может превышать длину или ширину прямоугольника. - Затем, используя
max()по этим минимальным значениям, мы находим самый большой квадрат, который можно вырезать из всех прямоугольников в списке.
- Мы используем функцию
Подсчитываем количество прямоугольников, которые могут вырезать квадрат с максимальной стороной:
count = sum(1 for l, w in rectangles if min(l, w) == max_len)- Для каждого прямоугольника мы снова вычисляем
min(l, w)и проверяем, равен ли этот минимальный размер максимальному возможному квадрату (max_len). - Для каждого прямоугольника, который может вырезать квадрат с размером
max_len, увеличиваем счетчикcountна 1.
- Для каждого прямоугольника мы снова вычисляем
Возвращаем результат:
return count- После подсчета количества прямоугольников, которые могут вырезать квадрат с максимальной стороной, возвращаем это количество.
Пример выполнения:
Предположим, у нас есть список прямоугольников [[5, 8], [3, 9], [5, 12], [16, 5]]:
- Для первого прямоугольника [5, 8] можно вырезать квадрат размером 5.
- Для второго прямоугольника [3, 9] можно вырезать квадрат размером 3.
- Для третьего прямоугольника [5, 12] можно вырезать квадрат размером 5.
- Для четвертого прямоугольника [16, 5] можно вырезать квадрат размером 5.
Максимальный возможный квадрат имеет размер 5, и такие квадраты можно вырезать из трех прямоугольников: первого, третьего и четвертого.
Ответ: 3 прямоугольника могут вырезать квадрат размером 5.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии