当前位置: 首页 > news >正文

LeetCode Python - 74. 搜索二维矩阵

目录

  • 题目描述
  • 解法
    • 方法一:二分查找
    • 方法二:从左下角或右上角搜索
  • 运行结果
    • 方法一
    • 方法二


题目描述

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:
在这里插入图片描述

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:
在这里插入图片描述

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104

解法

方法一:二分查找

我们将二维矩阵逻辑展开,然后二分查找即可。

时间复杂度 O(log(m×n))。其中 m 和 n 分别是矩阵的行数和列数。空间复杂度 O(1)。

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""m, n = len(matrix), len(matrix[0])left, right = 0, m * n - 1while left < right:mid = (left + right) >> 1x, y = divmod(mid, n)if matrix[x][y] >= target:right = midelse:left = mid + 1return matrix[left // n][left % n] == target

方法二:从左下角或右上角搜索

这里我们以左下角作为起始搜索点,往右上方向开始搜索,比较当前元素 matrix[i][j] 与 target 的大小关系:

  • 若 matrix[i][j]=target,说明找到了目标值,直接返回 true。
  • 若 matrix[i][j]>target,说明这一行从当前位置开始往右的所有元素均大于 target,应该让 i 指针往上移动,即
    i=i−1。
  • 若 matrix[i][j]<target,说明这一列从当前位置开始往上的所有元素均小于 target,应该让 j 指针往右移动,即
    j=j+1。

若搜索结束依然找不到 target,返回 false。

时间复杂度 O(m+n)。其中 m 和 n 分别是矩阵的行数和列数。空间复杂度 O(1)。

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""m, n = len(matrix), len(matrix[0])i, j = m - 1, 0while i >= 0 and j < n:if matrix[i][j] == target:return Trueif matrix[i][j] > target:i -= 1else:j += 1return False

运行结果

方法一

在这里插入图片描述

方法二

在这里插入图片描述

http://www.lryc.cn/news/325350.html

相关文章:

  • 如何安全地添加液氮到液氮罐中
  • LGBM算法 原理
  • 【WPF应用5】WPF中的TextBlock控件:属性与事件详解及示例
  • 【C语言基础】:内存操作函数
  • 3.24作业
  • Excel双击单元格后弹窗输入日期
  • 原生 HTML/CSS/JS 实现右键菜单和二级菜单
  • [项目前置]如何用webbench进行压力测试
  • 网络七层模型:理解网络通信的架构(〇)
  • format(C++20)
  • Ftrans安全数据摆渡系统 构建便捷的内外网数据交换通道
  • 【云开发笔记No.14】持续交付、持续部署、持续交付流水线
  • 蓝桥杯练习07小兔子爬楼梯
  • Docker in Docker原理与实战
  • Ruoyi若依框架下载流程详细解读(SpringBoot-Vue)
  • 【深度学习】Pytorch中实现交叉熵损失计算的方式总结
  • 机器学习:处理jira工单的分类问题
  • 后端常问面经之操作系统
  • RK3568平台 iperf3测试网络性能
  • Spring Boot中实现对特定URL的权限验证:拦截器、切面和安全框架的比较
  • 【能源数据分析-00】能源领域数据集集锦(动态更新)
  • 数据挖掘与机器学习 1. 绪论
  • Matlab实现序贯变分模态分解(SVMD)
  • 云安全与云计算的关系
  • WPF 界面变量绑定(通知界面变化)
  • eclipse导入svn项目
  • Prompt提示工程上手指南:基础原理及实践(四)-检索增强生成(RAG)策略下的Prompt
  • 阿里云倚天云服务器怎么样?如何收费?
  • 海外社交营销为什么用云手机?不用普通手机?
  • 【Mysql数据库基础05】子查询 where、from、exists子查询、分页查询