LeetCode in Python 74/240. Search a 2D Matrix I/II (搜索二维矩阵I/II)

搜索二维矩阵I其实可以转换为搜索一维数组,原因在于,只要先确定搜索的整数应该在哪一行,即可对该行进行二分查找。

搜索二维矩阵II中矩阵元素排列方式与I不同,但思想大致相同。

目录

LeetCode in Python 74.

LeetCode in Python 240. 

LeetCode in Python 74.

示例:

图1 搜索二维矩阵输入输出示例

代码:

class Solution:
    def searchMatrix(self, matrix, target):
        m, n = len(matrix), len(matrix[0])
        
        def binaSearch(i, j, target):
            l, r = 0, j
            while l <= r:
                mid = (l + r) // 2
                if target > matrix[i][mid]:
                    l = mid + 1
                elif target < matrix[i][mid]:
                    r = mid - 1
                else:
                    return True
            return False

        for i in range(m):
            if target < matrix[i][n - 1]:
                return binaSearch(i, n - 1, target)
            elif target > matrix[i][n - 1]:
                i += 1
            else:
                return True
        return False

 解释:

1)首先要判断target可能在哪一行,判断标准是将target与矩阵每一行最后一个元素比较,若大于该元素,则表明target在下一行,反之在这一行(按序一行一行比较)。在确定在哪一行之后,利用二分法在该行查找是否有target,有则True,无则False:

        for i in range(m):

                if target < matrix[i][n - 1]:

                        return binaSearch(i, n - 1, target)

               elif target > matrix[i][n - 1]:

                        i += 1

              else:

                       return True

       return False

2)在二分查找中注意,target对比的元素为matrix[i][mid],i代表target可能存在的行,即传过去的参数i。

LeetCode in Python 240. 

示例:

 

图2 搜索矩阵II输入输出示意图 

代码:

class Solution:
    def searchMatrix(self, matrix, target):
        m, n = len(matrix), len(matrix[0])
        r, c = m - 1, 0
        while r >= 0 and c < n:
            if target > matrix[r][c]:
                c += 1
            elif target < matrix[r][c]:
                r -= 1
            else:
                return True
        return False 

解释:

1)先确定列再确定行,即从矩阵左下角元素开始比较,target>该元素则右移,反之上移直到找到target返回True或无target返回False。

相关推荐

  1. 矩阵】240.搜索矩阵II

    2024-04-27 07:20:05       63 阅读
  2. 搜索矩阵 II矩阵】【二分】

    2024-04-27 07:20:05       62 阅读
  3. 240. 搜索矩阵 II

    2024-04-27 07:20:05       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 07:20:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 07:20:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 07:20:05       82 阅读
  4. Python语言-面向对象

    2024-04-27 07:20:05       91 阅读

热门阅读

  1. go中标签创建与引用

    2024-04-27 07:20:05       27 阅读
  2. Android常用开源库所使用的设计模式有哪些?

    2024-04-27 07:20:05       32 阅读
  3. sym和syms--Matlab学习

    2024-04-27 07:20:05       35 阅读
  4. 大模型流式任务转发终结篇python版本实现

    2024-04-27 07:20:05       35 阅读
  5. Ajax学习笔记

    2024-04-27 07:20:05       30 阅读
  6. UE_反射系统(虚幻编译系统)

    2024-04-27 07:20:05       39 阅读
  7. 现实与虚幻:人工智能的迷惑瞬间

    2024-04-27 07:20:05       36 阅读
  8. 了解数组:算法与应用

    2024-04-27 07:20:05       34 阅读
  9. Elasticsearch知识点表格总结

    2024-04-27 07:20:05       35 阅读