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))
    
    
  • 相关阅读:
    线性筛2 筛约数个数
    背包板子
    线段树(指针板子)
    10.11 模拟赛(QBXT国庆Day3)
    10.6 体育成绩统计
    10.5 T3 DDP BZOJ 4712
    10.2模拟赛总结
    线性筛1
    CF165D Beard Graph
    2019 CSP-S第一轮(hsyz半日游)
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/8510775.html
Copyright © 2011-2022 走看看