[LeetCode]Search a 2D Matrix II 搜索二维矩阵2

Search a 2D Matrix II

题意:从给定的二维数组中判断是否存在给定的数值。

二分搜索

思路:我一开始想到的就是之前在1中的方法,分别用两个变量来维护,然后缩小行和列的区间,但是发现没有确切的判断能够做到缩小它们的区间,所以放弃。为了不弄得那么复杂,可以从角落开始比较,比如左下角,这样它只能向单个方向进行移动,如果小于它则说明该行不可取,需要向上移动,如果大于它则说明该列不可取,需要向右移动。显然它的速度是比不上双个方向进行移动的速度来得快。

class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        if not matrix or not matrix[0]:
            return False
        if target < matrix[0][0] or target > matrix[-1][-1]:
            return False
        row, col = len(matrix)-1, 0
        while True:
            if matrix[row][col] > target:
                row -= 1
            elif matrix[row][col] < target:
                col += 1
            else:
                return True
            if row < 0 or col >= len(matrix[0]):
                return False
        return False

我们也可以从右上角开始:

class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        if not matrix or not matrix[0]:
            return False
        if target < matrix[0][0] or target > matrix[-1][-1]:
            return False
        rol = len(matrix[0])-1
        for row in matrix:
            while rol >=0 and row[rol] > target:
                rol -= 1
            if row[rol] == target:
                return True
        return False
posted @ 2017-09-15 15:14  banananana  阅读(168)  评论(0)    收藏  举报