美文网首页
搜索二维矩阵 II

搜索二维矩阵 II

作者: 领带衬有黄金 | 来源:发表于2019-11-01 23:45 被阅读0次

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例:

现有矩阵 matrix 如下:

[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]

代码:

一般速度:
class Solution:
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        return target in [j for i in matrix for j in i]
最佳:
class Solution:
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        
#         首先判断对角线
        if len(matrix)==0:
            return False

        # 最小方阵
        min_matrix=min(len(matrix),len(matrix[0]))
        if min_matrix==0:
            return False
        for i in range(min_matrix):
            if matrix[i][i]<target:
                continue
            elif matrix[i][i]==target:
                return True
            elif matrix[i][i]>target:
                for row_num in matrix[i][:i]:
                    if row_num==target:
                        return True
                for col_num in range(i):
                    if matrix[col_num][i]==target:
                        return True
        if len(matrix)<len(matrix[0]):
            for i in range(len(matrix),len(matrix[0])):
                if matrix[len(matrix)-1][i]<target:
                    continue
                elif matrix[len(matrix)-1][i]==target:
                    return True
                elif matrix[len(matrix)-1][i]>target:
                    for col in range(len(matrix)):
                        if matrix[col][i]==target:
                            return True
        if len(matrix)>len(matrix[0]):
            for i in range(len(matrix[0]),len(matrix)):
                if matrix[i][len(matrix[0])-1]<target:
                    continue
                elif matrix[i][len(matrix[0])-1]==target:
                    return True
                elif matrix[i][len(matrix[0])-1]>target:
                    for num in matrix[i]:
                        if num==target:
                            return True
        return False

相关文章

网友评论

      本文标题:搜索二维矩阵 II

      本文链接:https://www.haomeiwen.com/subject/mvxcbctx.html