尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LeetCode 补拙笔记 日期:2026.09.03 题目:240.搜索二维矩阵 II

LeetCode 补拙笔记 日期:2026.09.03 题目:240.搜索二维矩阵 II LeetCode 补拙笔记0. 前言日期2026.09.03题目240.搜索二维矩阵 II难度中等标签数组 链表 哈希表1. 题目理解问题描述编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例输入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输入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输出false2. 解题思路核心观察矩阵行升序、列升序选取矩阵右上角作为起始点。右上角元素大于目标则目标不可能在当前列小于目标则目标不可能在当前行相等直接命中。不需要遍历全部矩阵每次可以剔除一行或者一列。算法步骤初始化指针x指向第一行y指向最后一列。循环判定边界x不越行下边界y不越列下边界。当前位置值大于targety左移小于targetx下移等于target返回true。循环结束未找到返回false。3. 代码实现packagelc240;publicclassSolution{publicbooleansearchMatrix(int[][]matrix,inttarget){intnmatrix.length-1;intx0;intymatrix[0].length-1;while(xny0){if(matrix[x][y]target){y--;}elseif(matrix[x][y]target){x;}else{returntrue;}}returnfalse;}}4. 代码优化说明{减少if分支判断利用差值正负简化多分支条件去掉else‑if仅保留两个分支}packagelc240;publicclassSolution{publicbooleansearchMatrix(int[][]matrix,inttarget){intnmatrix.length-1;intx0;intymatrix[0].length-1;while(xny0){intdiffmatrix[x][y]-target;if(diff0){y--;}elseif(diff0){x;}else{returntrue;}}returnfalse;}}5. 复杂度分析时间复杂度O(mn)m为行数n为列数。每轮循环x或者y发生移动最多移动mn次。空间复杂度O(1)仅使用常数额外变量无额外数组、集合开辟。6. 总结本题利用矩阵右上角特殊位置完成剪枝不要使用暴力遍历O(m*n)也不要每行单独二分O(m log n)。右上角游走是该题最优解法。优化版本将差值提前计算减少数组重复访问条件分支逻辑更加简洁。注意边界判断防止数组下标越界。
返回列表