【leetcode热题100】搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false

示例 1:

复制代码
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

复制代码
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

解法一 二分法

看到了有序序列,啥都不用想直接二分,只需要考虑到怎么把二分时候的下标转换为矩阵的行、列下标就可以了,很简单,用除法和求余就够了。

复制代码
public boolean searchMatrix(int[][] matrix, int target) {
    int rows = matrix.length;
    if (rows == 0) {
        return false;
    }
    int cols = matrix[0].length;
    int left = 0;
    int right = rows * cols - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        int temp = matrix[mid / cols][mid % cols];
        if (temp == target) {
            return true;
        } else if (temp < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return false;
}

时间复杂度:O ( log ( n ) )。

空间复杂度:O ( 1 )。

相关推荐
秋山落叶万岭花开ღ2 分钟前
深入探索串的高级操作:从算法到 LeetCode 实战
数据结构·python·算法
Bt年8 分钟前
浮点数精度问题(CSP38思考)
开发语言·c++·算法
谷哥的小弟10 分钟前
重温经典算法——二分查找
算法
开压路机27 分钟前
算法:模拟
算法
learn_coder1 小时前
运动控制--小车的启动和停止算法
算法
循环渐进Forward1 小时前
【TinyWebServer】HTTP连接处理
linux·网络·c++·网络协议·算法·http
钓鱼的肝2 小时前
题单:归并排序
c++·算法
Sun_light3 小时前
队列:先进先出的线性数据结构及其应用
前端·javascript·算法
吕小鸣3 小时前
Coze、Dify、FastGPT三大AI智能平台架构与能力对比
算法