【leetcode系列】【算法】【中等】搜索二维矩阵

题目:

题目链接: https://leetcode-cn.com/problems/search-a-2d-matrix/

解题思路:

因为是严格有序的,所以可以使用二分查找,但是需要稍微修改一下

  1. 初始化的left = 0
  2. 初始化的right = m * n - 1
  3. 假设mid = (left + right) // 2,则当前mid对应的数字的行号 = mid // n,列号 = mid % n
  4. 其余下标对应的数字,均参考第三项

代码实现:

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if 0 == len(matrix) or 0 == len(matrix[0]):
            return False
        
        left, right = 0, len(matrix) * len(matrix[0]) - 1
        while left <= right:
            mid = (left + right) // 2
            mid_num = matrix[mid // len(matrix[0])][mid % len(matrix[0])]
            left_num = matrix[left // len(matrix[0])][left % len(matrix[0])]
            right_num = matrix[right // len(matrix[0])][right % len(matrix[0])]
            if mid_num == target:
                return True
            elif left_num <= target < mid_num:
                right = mid - 1
            else:
                left = mid + 1
                
        return False
发布了100 篇原创文章 · 获赞 4 · 访问量 1488

猜你喜欢

转载自blog.csdn.net/songyuwen0808/article/details/105236289
今日推荐