Поиск максимумов - это алгоритм, который находит несколько наибольших элементов в массиве. Это полезно для ранжирования, статистического анализа и различных алгоритмов машинного обучения.
def find_three_max(arr):
"""
Находит три максимальных элемента за один проход
Args:
arr: массив чисел
Returns:
кортеж (max1, max2, max3) или None для отсутствующих
"""
if len(arr) < 3:
return None
# Инициализируем максимумы
max1 = max2 = max3 = float('-inf')
for num in arr:
if num > max1:
max3 = max2
max2 = max1
max1 = num
elif num > max2:
max3 = max2
max2 = num
elif num > max3:
max3 = num
return (max1, max2, max3)
# Пример использования
numbers = [64, 34, 25, 12, 22, 11, 90, 45, 78]
result = find_three_max(numbers)
print(f"Три максимума: {result}")
def find_three_max_sorted(arr):
"""
Находит три максимальных элемента с помощью сортировки
Args:
arr: массив чисел
Returns:
кортеж (max1, max2, max3) или None для отсутствующих
"""
if len(arr) < 3:
return None
# Сортируем массив в убывающем порядке
sorted_arr = sorted(arr, reverse=True)
# Возвращаем первые три элемента
return tuple(sorted_arr[:3])
# Пример использования
numbers = [64, 34, 25, 12, 22, 11, 90, 45, 78]
result = find_three_max_sorted(numbers)
print(f"Три максимума: {result}")
Результат: (90, 78, 64)
import heapq
def find_three_max_heap(arr):
"""
Находит три максимальных элемента с помощью кучи
Args:
arr: массив чисел
Returns:
кортеж (max1, max2, max3) или None для отсутствующих
"""
if len(arr) < 3:
return None
# Создаем кучу из всех элементов
heap = [(-x, x) for x in arr] # Отрицательные значения для max-heap
heapq.heapify(heap)
# Извлекаем три максимума
result = []
for _ in range(3):
if heap:
result.append(heapq.heappop(heap)[1])
return tuple(result)
def find_three_max_recursive(arr, k=3):
"""
Рекурсивный поиск k максимальных элементов
Args:
arr: массив чисел
k: количество максимумов для поиска
Returns:
список k максимальных элементов
"""
if k == 0 or len(arr) == 0:
return []
if k == 1:
return [max(arr)]
# Находим текущий максимум
current_max = max(arr)
# Убираем максимум и рекурсивно ищем k-1 максимумов
remaining = [x for x in arr if x != current_max]
other_maxes = find_three_max_recursive(remaining, k - 1)
return [current_max] + other_maxes