1. 程式人生 > >lintcode_28.搜索二維矩陣

lintcode_28.搜索二維矩陣

返回 boolean end 一個 you urn for whether art

寫出一個高效的算法來搜索 m × n矩陣中的值。

這個矩陣具有以下特性:

  • 每行中的整數從左到右是排序的。
  • 每行的第一個數大於上一行的最後一個整數

樣例

考慮下列矩陣:

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

給出 target = 3,返回 true

class Solution:
    """
    @param: matrix: matrix, a list of lists of integers
    @param: target: An integer
    @return: a boolean, indicate whether matrix contains target
    
""" def searchMatrix(self, matrix, target): # write your code here for i in matrix: if i[-1] >= target: for x in i: if x == target: return True return False return False

行順序遍歷,再順序找列。

也可以用二分搜索,看成一維向量做,不過好像效率更低一點,可能跟數據量有關。

九章參考:

class Solution:
    """
    @param matrix, a list of lists of integers
    @param target, an integer
    @return a boolean, indicate whether matrix contains target
    """
    def searchMatrix(self, matrix, target):
        if len(matrix) == 0:
            
return False n, m = len(matrix), len(matrix[0]) start, end = 0, n * m - 1 while start + 1 < end: mid = (start + end) / 2 x, y = mid / m, mid % m if matrix[x][y] < target: start = mid else: end = mid x, y = start / m, start % m if matrix[x][y] == target: return True x, y = end / m, end % m if matrix[x][y] == target: return True return False

lintcode_28.搜索二維矩陣