Задача: Двумерный бинарный поиск

Задача: Двумерный бинарный поиск

https://t.me/pythonl

Условие: дана 2-мерная матрица чисел, в которой числа упорядочены по возрастанию сверху-вниз и слева-направо. Надо определить, есть ли в матрице целевое значение. 

Пример:

Ввод: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3

Вывод: True

Ввод: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13

Вывод: Fasle


Решение:

Сложности:

  • Временная сложность: O(log(m * n))
  • Пространственная сложность: O(1)

КОД Python:

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        l=0
        r=len(matrix)-1
        mid_r=len(matrix[0])-1
        mid_l=0
        while l<=r:
            mid = (l+r)>>1
            if matrix[mid][0]<=target and matrix[mid][mid_r]>=target:
                while mid_l<=mid_r:
                    mid_mid=(mid_r+mid_l)>>1
                    if matrix[mid][mid_mid]==target:
                        return True
                    elif matrix[mid][mid_mid]<target:
                        mid_l=mid_mid+1
                    else:
                        mid_r=mid_mid-1
                return False
            elif matrix[mid][0]<target:
                l=mid+1
            else:
                r=mid-1
        return False




Report Page