Search a 2D Matrix
Detailed guide and Python implementation for the 'Search a 2D Matrix' problem.
1. Узнать
The 'Search a 2D Matrix' problem is a key challenge in the Binary Search section.
This implementation focuses on easy-level logic in Python.
We prioritize technical accuracy and code readability in our provided solutions.
2. Real-World Applications
3. Visual Intuition
Visualizing the logic flow for Search a 2D Matrix.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Read the problem statement for Search a 2D Matrix carefully.
2. Formulate brute force
Draft a simple iterative solution.
3. Identify inefficiency
Look for redundant calculations.
4. Optimize search path
Use hashing or sorting to speed up the process.
5. Final Implementation
Очистите код для производственных стандартов. ---ПИСЕП--- Пустые входные структуры ---ПИСЕП--- Одноэлементные входы ---ПИСЕП--- Большие числовые границы ---ПИСЕП--- Объясните логику вашего подхода к бинарному поиску. ---ПИСЕП--- Обсудите крайние случаи, такие как нулевые или пустые входные данные. ---ПИСЕП--- Применяются стандартные свойства задачи двоичного поиска. ---ПИСЕП--- Рассмотрите возможность использования структур данных, специфичных для двоичного поиска, таких как наборы или кучи. ---ПИСЕП--- Коко ест бананы ---ПИСЕП--- Подробное руководство и реализация __PYTERM_0__ для задачи «Коко ест бананы». ---ПИСЕП--- Коко любит есть бананы. Имеется __PYCODE_0__ стопок бананов, в __PYCODE_1__-й кучке находится __PYCODE_2__ бананов. Охранники ушли и вернутся через __PYCODE_3__ часов. Коко может определить скорость поедания бананов в час __PYCODE_4__. Каждый час она выбирает какую-то стопку бананов и съедает __PYCODE_5__ бананов из этой стопки. Если в куче меньше __PYCODE_6__ бананов, она съедает их все и больше не будет есть бананы в течение этого часа. Коко любит есть медленно, но все равно хочет съесть все бананы до того, как вернутся охранники. Верните минимальное целое число __PYCODE_7__ такое, чтобы она могла съесть все бананы в течение __PYCODE_8__ часов. Напишите функцию __PYCODE_9__. ---ПИСЕП--- 150 лучших интервью ---ПИСЕП--- Бинарный поиск ---ПИСЕП--- Проблема «Коко ест бананы» — ключевая задача в разделе двоичного поиска. ---ПИСЕП--- Эта реализация фокусируется на логике простого уровня в __PYTERM_0__. ---ПИСЕП--- В предоставляемых нами решениях мы уделяем приоритетное внимание технической точности и читаемости кода. ---ПИСЕП--- Алгоритмическая инженерия ---ПИСЕП--- Соревновательное программирование ---ПИСЕП--- Технические оценки ---ПИСЕП--- Визуализация логического процесса игры «Коко ест бананы». ---ПИСЕП--- Внимательно прочитайте постановку задачи «Коко ест бананы». ---ПИСЕП--- Нарисуйте простое итеративное решение. ---ПИСЕП--- Ищите лишние вычисления. ---ПИСЕП--- Используйте хеширование или сортировку, чтобы ускорить процесс. ---ПИСЕП--- Очистите код для производственных стандартов. ---ПИСЕП--- Пустые входные структуры ---ПИСЕП--- Одноэлементные входы ---ПИСЕП--- Большие числовые границы ---ПИСЕП--- Объясните логику вашего подхода к бинарному поиску. ---ПИСЕП--- Обсудите крайние случаи, такие как нулевые или пустые входные данные. ---ПИСЕП--- Применяются стандартные свойства задачи двоичного поиска. ---ПИСЕП--- Рассмотрите возможность использования структур данных, специфичных для двоичного поиска, таких как наборы или кучи. ---ПИСЕП--- Найти минимум в повернутом отсортированном массиве ---ПИСЕП--- Подробное руководство и реализация __PYTERM_0__ для задачи «Найти минимум в отсортированном массиве». ---ПИСЕП--- Предположим, что массив длиной __PYCODE_0__, отсортированный в порядке возрастания, поворачивается от 1 до __PYCODE_1__ раз. Например, массив __PYCODE_2__ может стать __PYCODE_3__, если его повернуть 4 раза. Обратите внимание, что вращение массива __PYCODE_4__ 1 раз приводит к результату __PYCODE_5__. Учитывая отсортированный повернутый массив __PYCODE_6__ уникальных элементов, верните минимальный элемент этого массива. Вы должны написать алгоритм, который работает за время O(log n). Напишите функцию __PYCODE_7__. ---ПИСЕП--- 150 лучших интервью ---ПИСЕП--- Бинарный поиск ---ПИСЕП--- Задача «Найти минимум в отсортированном массиве» — ключевая задача в разделе двоичного поиска. ---ПИСЕП--- Эта реализация фокусируется на логике простого уровня в __PYTERM_0__. ---ПИСЕП--- В предоставляемых нами решениях мы уделяем приоритетное внимание технической точности и читаемости кода.
Постановка задачи
You are given an m x n integer matrix matrix with the following two properties:
- Each row is sorted in non-decreasing order.
- The first integer of each row is greater than the last integer of the previous row.
Given an integer target, return True if target is in matrix or False otherwise.
You must write a solution in O(log(m * n)) time complexity.
Write a function searchMatrix(matrix: List[List[int]], target: int) -> bool.
- •m == len(matrix)
- •n == len(matrix[i])
- •1 <= m, n <= 100
- •-10^4 <= matrix[i][j], target <= 10^4
Примеры
matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 60]], target = 3
True
3 is found in the first row at index 1.
matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 60]], target = 13
False
13 is not present in the matrix.
Need a Hint?
Edge Cases to Watch
- Empty input structures
- Single element inputs
- Large numerical bounds
Готовы решить?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
Интервью: идеи и вариации
Разбивка анализа сложности
Почему время: Directly evaluates all possibilities.
Почему космос: Uses standard local memory.
Почему время: Optimized paths reduce total operations.
Почему космос: May trade memory for speed.
Оптимизированный код Python для решения
Оптимизированный код Python для решения
def search_matrix_opt(matrix, target):
if not matrix or not matrix[0]: return False
ROWS, COLS = len(matrix), len(matrix[0])
top, bot = 0, ROWS - 1
while top <= bot:
row = (top + bot) // 2
if target > matrix[row][-1]:
top = row + 1
elif target < matrix[row][0]:
bot = row - 1
else:
break
if not (top <= bot): return False
row = (top + bot) // 2
l, r = 0, COLS - 1
while l <= r:
m = (l + r) // 2
if target > matrix[row][m]:
l = m + 1
elif target < matrix[row][m]:
r = m - 1
else:
return True
return FalseКод грубой силы (спойлер защищен)
Код грубой силы (спойлер защищен)
def search_matrix_brute(matrix, target):
for row in matrix:
if target in row: return True
return FalseAlgorithm Pattern Checklist
When dealing with Binary Search data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
Key Revision Notes
Standard Binary Search problem properties apply.
Связанные вопросы
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
Рекомендуемые ресурсы Python
Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.
Объяснение переменных и типов данных Python
Понимать переменные Python и основные типы данных (строки, целые числа, числа с плавающей запятой, логические значения). Полное руководство для начинающих по распределению памяти в Python.
Как отсортировать список в Python
Узнайте, как сортировать список в Python с помощью метода sort() и функции sorted(). Ознакомьтесь с примерами пользовательской сортировки ключей и обратного порядка.
Шпаргалка по словарным методам Python
Изучите словарные методы Python. Полное справочное руководство по вставке, извлечению, обновлению и проверке пар ключ-значение.
Python против JavaScript: какой язык программирования лучше?
Всестороннее сравнение Python и JavaScript. Изучите синтаксические различия, производительность, варианты использования (серверная и клиентская части) и примеры кодирования.