Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Binary Search: Границы
binary_search_boundaries

Binary Search: Границы

Поиск в повёрнутых массивьях, поиск пика, поиск минимума.

Binary Search: Границы и повёрнутые массивы

Поиск границ в отсортированных массивах и поиск в повёрнутых массивах.

#1. Search in Rotated Sorted Array (LeetCode 33) 🟩 Medium

Ссылка: https://leetcode.com/problems/search-in-rotated-sorted-array/

Условие: Отсортированный по возрастанию массив nums был повёрнут в некоторой точке. Например, [0, 1, 2, 4, 5, 6, 7] может стать [4, 5, 6, 7, 0, 1, 2].

Дан повёрнутый массив nums и целевое значение target. Если target найден в массиве, верните его индекс. В противном случае верните -1.

Примеры:

Ввод: nums = [4, 5, 6, 7, 0, 1, 2], target = 0
Вывод: 4

Ввод: nums = [4, 5, 6, 7, 0, 1, 2], target = 3
Вывод: -1

Решение:

def search(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return mid # Левая половина отсортирована if nums[left] <= nums[mid]: if nums[left] <= target < nums[mid]: right = mid - 1 else: left = mid + 1 # Правая половина отсортирована else: if nums[mid] < target <= nums[right]: left = mid + 1 else: right = mid - 1 return -1

Объяснение:

  • Определяем, какая половина отсортирована
  • Если nums[left] <= nums[mid] — левая половина отсортирована
  • Проверяем, попадает ли target в отсортированную половину

Сложность: O(log n)


#2. Find Minimum in Rotated Sorted Array (LeetCode 153) 🟩 Medium

Ссылка: https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/

Условие: Отсортированный по возрастанию массив nums был повёрнут в некоторой точке. Найдите минимальный элемент в этом повёрнутом массиве.

Примеры:

Ввод: nums = [3, 4, 5, 1, 2]
Вывод: 1

Ввод: nums = [4, 5, 6, 7, 0, 1, 2]
Вывод: 0

Решение:

def findMin(nums): left, right = 0, len(nums) - 1 while left < right: mid = left + (right - left) // 2 # Если mid > right, минимум в правой половине if nums[mid] > nums[right]: left = mid + 1 # Иначе минимум в левой половине (включая mid) else: right = mid return nums[left]

Объяснение:

  • Сравниваем nums[mid] с nums[right]
  • Если nums[mid] > nums[right] — минимум справа от mid
  • Условие left < right (не <=), так как ищем точку схода

Сложность: O(log n)


#3. Find Peak Element (LeetCode 162) 🟩 Medium

Ссылка: https://leetcode.com/problems/find-peak-element/

Условие: Пиковый элемент — это элемент, который строго больше своих соседей.

Дан целый массив nums. Найдите пиковый элемент и верните его индекс. Если в массиве несколько пиков, верните индекс любого из них.

Примеры:

Ввод: nums = [1, 2, 3, 1]
Вывод: 2

Ввод: nums = [1, 2, 1, 3, 5, 6, 4]
Вывод: 5

Решение:

def findPeakElement(nums): left, right = 0, len(nums) - 1 while left < right: mid = left + (right - left) // 2 # Сравниваем с правым соседом if nums[mid] < nums[mid + 1]: # Пик справа left = mid + 1 else: # Пик слева (включая mid) right = mid return left

Объяснение:

  • Сравниваем nums[mid] с nums[mid + 1]
  • Если nums[mid] < nums[mid + 1] — идём вправо (там точно есть пик)
  • Иначе — пик слева (включая mid)

Сложность: O(log n)


#4. Шпаргалка

ЗадачаКлючевая идея
Rotated SearchОпределить отсортированную половину
Find MinimumСравнивать mid с right
Find PeakСравнивать mid с mid+1

#5. ⚠️ Common Mistakes

#❌ Ошибка 1: Неправильное определение отсортированной половины

# ❌ Неправильно if nums[left] < nums[mid]: # Не включает равенство! # ✅ Правильно if nums[left] <= nums[mid]: # Включает равенство

#❌ Ошибка 2: Неправильное условие для Find Minimum

# ❌ Неправильно while left <= right: # Может зациклиться # ✅ Правильно while left < right: # Ищем точку схода

#6. Заключение

Binary Search: Границы и повёрнутые массивы — поиск в модифицированных отсортированных массивах.

Ключевые принципы:

  1. Rotated Search: определить отсортированную половину
  2. Find Minimum: сравнивать mid с right
  3. Find Peak: двигаться в сторону возрастания

Далее: Binary Search: Поиск ответа