LC——搜索二维矩阵 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
示例 2:
输入: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 = 20
输出:false
提示:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matix[i][j] <= 109
每行的所有元素从左到右升序排列
每列的所有元素从上到下升序排列
-109 <= target <= 109
方式一——二分
1 class Solution { 2 public boolean searchMatrix(int[][] matrix, int target) { 3 int n = matrix.length; 4 // 二分 5 for (int i = 0; i < n; i++) { 6 int index = Arrays.binarySearch(matrix[i], target); 7 if (index >= 0) { 8 return true; 9 } 10 } 11 12 return false; 13 } 14 }
时间复杂度:O(nlogn)
空间复杂度:O(1)
方式二——利用题目给定的排序特性找规律
选取两个点:
①右上角(这里我们采用右上角)
②左下角
1 class Solution { 2 public boolean searchMatrix(int[][] matrix, int target) { 3 // 从右上角开始找(选取的地方很重要,因为选取的地方要根据指定值唯一确定下一次的走向) 4 int row = 0; 5 int col = matrix[0].length - 1; 6 while (row < matrix.length && col >= 0) { 7 int cur = matrix[row][col]; 8 if (target == cur) { 9 return true; 10 } else if (target < cur) { 11 // 往左走 12 col--; 13 } else if (target > cur) { 14 // 往下走 15 row++; 16 } 17 } 18 19 return false; 20 } 21 }
时间复杂度:O(n)
空间复杂度:O(1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能