28. 搜索二维矩阵

题目

写出一个高效的算法来搜索 m × n矩阵中的值。

这个矩阵具有以下特性:

  • 每行中的整数从左到右是排序的。
  • 每行的第一个数大于上一行的最后一个整数。
样例

考虑下列矩阵:

[
  [1, 3, 5, 7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

给出 target = 3,返回 true

挑战 

O(log(n) + log(m)) 时间复杂度

 

题解

本来想先找出在哪行,再找出再哪列,但不知道怎么写,就直接对每行二分了。。后面发现这题目数据不直接可以总体二分的,因为他是一直有序,就可以直接对长度进行二分了。

def searchMatrix(self, matrix, target):
    for i in matrix:
        if binarySearch(0, i,target) == True:
            return True
    else:
        return False

def binarySearch(self, list, target):
    st = 0
    ed = len(list) - 1
    while 1:
        mid = (st + ed) / 2
        if list[mid] == target:
            return True
        elif list[mid] < target:
            st = mid + 1
        else:
            ed = mid - 1
        print(st, ed)
        if st > ed:
            return False
    return False

 

posted on 2018-03-21 19:19  usp10  阅读(94)  评论(0编辑  收藏  举报

导航