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

【矩阵】240. 搜索二维矩阵 II【中等】

搜索二维矩阵 II

  • 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。
  • 该矩阵具有以下特性:
  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

示例 1:

在这里插入图片描述

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

解题思路

  • 1、根据矩阵的特性,可以发现右上角的元素具有一个特性:它是该行最大的元素,并且是该列最小的元素。
  • 2、我们可以从右上角开始搜索,如果当前元素等于目标值,则返回 true。
  • 3、如果当前元素大于目标值,则目标值必定在当前元素的左侧列,因此向左移动一列。
  • 4、如果当前元素小于目标值,则目标值必定在当前元素的下方行,因此向下移动一行。
  • 5、重复步骤 3 和 4,直到找到目标值或者越界。

Java实现

public class Search2DMatrixII {public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}int m = matrix.length;int n = matrix[0].length;int row = 0, col = n - 1; // Start from the top-right corner从右上角开始
//        {1, 4, 7, 11, 15},
//        {2, 5, 8, 12, 19},
//        {3, 6, 9, 16, 22},
//        {10, 13, 14, 17, 24},
//        {18, 21, 23, 26, 30}while (row < m && col >= 0) {if (matrix[row][col] == target) {return true; // Found the target} else if (matrix[row][col] > target) {col--; // Move left in the current row 在当前行向左移动} else {row++; // Move down to the next row 向下移动到下一行}}return false; // Target not found}public static void main(String[] args) {Search2DMatrixII search = new Search2DMatrixII();int[][] matrix = {{1, 4, 7, 11, 15},{2, 5, 8, 12, 19},{3, 6, 9, 16, 22},{10, 13, 14, 17, 24},{18, 21, 23, 26, 30}};int target1 = 5;int target2 = 20;System.out.println("Target 5 found: " + search.searchMatrix(matrix, target1));System.out.println("Target 20 found: " + search.searchMatrix(matrix, target2));}
}

时间空间复杂度

  • 时间复杂度:O(m + n),其中 m 和 n 分别是矩阵的行数和列数
  • 空间复杂度:O(1),只需要使用常数级别的额外空间
http://www.lryc.cn/news/319117.html

相关文章:

  • 详解uniapp的生命周期
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PluginComponent)
  • mysql笔记:15. 事务和锁
  • Learn OpenGL 15 面剔除
  • EndeavourOs(arch系)安装sunpinyin输入法(ibus) + 迅雷(xunlei-bin)
  • Spring Cache框架的介绍和使用
  • perl 用 XML::Parser 解析 XML文件,访问哈希
  • MATLAB中的矩阵和数组,它们之间有什么区别?
  • python爬虫实战——抖音
  • Day1-力扣刷题学习打卡
  • C语言的位操作与位字段
  • 应用实战|从头开始开发记账本1:如何获取BaaS服务
  • el-form v-for循环列表的表单如何校验
  • 笔记:《NCT全国青少年编程能力等级测试教程Python语言编程三级》
  • 地平线旭日x3派部署yolov5--全流程
  • 【Golang星辰图】Go语言云计算SDK全攻略:深入Go云存储SDK实践
  • 深入理解TCP:序列号、确认号和自动ACK的艺术
  • 家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型
  • ctf_show笔记篇(web入门---代码审计)
  • c语言的字符串函数详解
  • HarmonyOS NEXT应用开发—折叠屏音乐播放器方案
  • Java项目:55 springboot基于SpringBoot的在线视频教育平台的设计与实现015
  • 说下你对TCP以及TCP三次握手四次挥手的理解?
  • wsl-oracle 安装 omlutils
  • Python类属性和对象属性大揭秘!
  • 北斗卫星在桥隧坡安全监测领域的应用及前景展望
  • 如何通过堡垒机JumpServer使用VisualCode 连接服务器进行开发
  • 【Linux】进程优先级
  • Fair Data Exchange:区块链实现的原子式公平数据交换
  • 详解优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器