hot100-51搜索二维矩阵

一、题目

m×n的矩阵,每行中的整数从左到右递增排列,每行第一个整数大于前一行的最后一个整数。

给定矩阵和target,如果target在矩阵中,返回true,否则返回false。

二、思路

1、这个题目和 搜索二维矩阵 II 做法可以相同,从右上角开始搜索。如果当前值 大于 target → 向左走(排除这一列);如果当前值 小于 target → 向下走(排除这一行);如果相等 → 找到了!

2、这个题目的特性是,每行的第一个元素 > 上一行的最后一个怨怒是,说明所有行是严格递增拼接的,使用上面的解法时间复杂度是O(m+n),如果使用二分查找时间复杂度是O(log(mn))。

展开为一个一维数组,总长度m x n,在[0,N-1]范围内进行二分查找。对于任意一维索引mid,转换为二维坐标,行号:row=mid/n,列号:col=mid%n。比较matrix[m][n]与target,调整左右边界。

int row = mid / n; // 整除 → 得到"完整行数"

int col = mid % n; // 取余 → 得到"在该行中的偏移"

三、代码

复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length-1,n = matrix[0].length-1;
        int row = 0, col = n;
        while(row <= m && col >= 0){
            if(matrix[row][col] == target){
                return true;
            }else if(matrix[row][col] > target){
                col--;
            }else{
                row++;
            }
        }
        return false;
    }
}

做法二

复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length,n = matrix[0].length;
        int left=0,right = m*n -1;
        while(left <= right){
            int mid = left + (right - left) /2;
            int row = mid / n;
            int col = mid % n;
            if(matrix[row][col] == target){
                return true;
            }else if(matrix[row][col] < target){
                left = mid + 1;
            }else{
                right = mid - 1;
            }
        }
        return false;
    }
}
相关推荐
CappuccinoRose3 分钟前
回溯法 - 软考备战(四十三)
算法·排列组合·路径·n皇后·子集·解数独·岛屿
AC赳赳老秦6 分钟前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw
Robot_Nav41 分钟前
Shape-Aware MPPI(SA MPPI)算法:基于RC-ESDF的任意形状机器人实时轨迹优化
算法·机器人·sa-mppi
IT观测1 小时前
创想三维携AI教育全矩阵亮相第87届教装展,构建3D打印教育新范式
人工智能·3d·矩阵
gumichef1 小时前
算法的时间复杂度和空间复杂度
数据结构
小O的算法实验室1 小时前
2026年ESWA,自适应基于排序的协同进化学习粒子群算法+边缘计算服务器部署,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
cpp_25012 小时前
P1832 A+B Problem(再升级)
数据结构·c++·算法·动态规划·题解·洛谷·背包dp
꧁细听勿语情꧂2 小时前
合并两个有序表、判断链表的回文结构、相交链表、环的链表一和二
c语言·开发语言·数据结构·算法
木井巳2 小时前
【递归算法】解数独
java·算法·leetcode·决策树·深度优先·剪枝
Cathy Bryant3 小时前
微分几何:曲面与坐标系
笔记·矩阵·高等数学·物理学·微分几何