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。比较matrixmn与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;
    }
}
相关推荐
UIU1148 分钟前
P16237 [蓝桥杯 2026 省 B] 应急布线
数据结构·c++·算法·蓝桥杯
旖旎夜光11 分钟前
LeetCode 315: 算右侧小于当前元素的个数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
像风一样自由202020 分钟前
2.如何用FastAPI把一个Python算法封装成HTTP服务
python·算法·fastapi
D e re k ZH25 分钟前
保序回归:从 PAVA 到可并堆的单调约束优化
c++·算法·数据挖掘·回归·kotlin
青少儿编程课堂27 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:字典树前缀树与单词检索统计
c++·python·算法·bfs·信息学竞赛
Nuanyt30 分钟前
LeetCode Hot 100 链表专题2 3 题 (Java)
java·笔记·算法·leetcode·链表
海绵宝宝转agent1 小时前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先
青少儿编程课堂1 小时前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
SZYSK2 小时前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节
Ivanqhz2 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节