zoukankan      html  css  js  c++  java
  • leetcode74:二维矩阵搜索问题

    使用递归的方式解决,对于matrix,在左上角x,y,右下角xx,yy组成的区域内搜索target。
    mx=x和xx的中点,my=y和yy的中点
    判断matrix[mx][my],如果它大于target,则左上角四分之一区域无需再搜;如果它小于target,则右下角四分之一区域无需再搜。但是右上角和左下角有可能需要搜索。复杂度为log(行×列)

    class Solution:
        def solve(self, matrix, x, y, xx, yy, target):
            if target > matrix[xx - 1][yy - 1] or target < matrix[x][y]: return False
            if x + 1 >= xx and y + 1 >= yy:
                if matrix[x][y] == target:
                    return True
                else:
                    return False
            mx = (x + xx) >> 1
            my = (y + yy) >> 1
            if matrix[mx][my] > target:
                ans = self.solve(matrix, x, y, mx, my, target)
            else:
                ans = self.solve(matrix, mx, my, xx, yy, target)
            if ans: return True
            ans = self.solve(matrix, mx, y, xx, my, target) or self.solve(matrix, x, my, mx, yy, target)
            return ans
    
        def searchMatrix(self, matrix, target):
            """
            :type matrix: List[List[int]]
            :type target: int
            :rtype: bool
            """
            if not matrix: return False
            r = len(matrix)
            if not r: return False
            c = len(matrix[0])
            if not c: return False
            return self.solve(matrix, 0, 0, r, c, target)
    
    
    if __name__ == '__main__':
        print(Solution().searchMatrix([[1, 3]], 1))
    
    
  • 相关阅读:
    Linux命令行常用符号
    IP地址详解
    黑帽子白帽子问题
    点香测算时间
    Linux系统中的压缩和打包
    Python冒泡排序
    Python选择排序
    linux 文件三大特殊权限(SUID SGID SBIT)
    预处理器之头文件嵌套包含最大层数
    一不小心就对未分配的内存进行访问和修改
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/8510775.html
Copyright © 2011-2022 走看看