74.搜索二维矩阵

给你一个满足下述两条属性的 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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104

代码:

复制代码
/*将矩阵看成一个有序的一维数组使用二分法,例如示例一可以看成[1,3,5,7,10,11,16,20,23,30,36,40]  二分法是向下取整 */

bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {
    int m = matrixSize,n = matrixColSize[0];
    if(m==0 || n==0){
        return false;  //行或者列为0则是空矩阵,返回false
    }
    int l = 0,r = m*n-1;
    while(l<=r){
        int mid = l + (r-l)/2;
        int hang = mid/n;  //除法得到行
        int lie = mid%n;   //取余得到列
        if(matrix[hang][lie]==target){
            return true;
        }else if(matrix[hang][lie]>target){  //二分法
            r = mid-1;
        }else{
            l = mid+1;
        }
    }
    return false;
}

补充:

数学推导:如何从一维索引反推二维坐标?

以示例一来计算

1,3,5,7,10,11,16,20,23,30,36,40

对于任意一维索引 mid(范围 0 到 行×列-1),我们要找到对应的二维坐标 (hang, lie)

  1. 行号 的计算

    • 每一行有 n 个元素,因此 mid 所在的行号等于 mid 除以 lie 的整数部分
    • 例如:
      • mid = 1 时,1 ÷ 4 = 01,说明 mid 在第 0 行(从 0 开始计数)。
      • mid = 8 时,8 ÷ 4 = 20,说明 mid 在第 2 行。
  2. 列号 col 的计算

    • mid 除以 n余数即为列号。
    • 例如:
      • mid = 1 时,余数为 1,说明 mid 在第 1 行的第 1 列(对应二维矩阵中的元素 3)。
      • mid = 8 时,余数为 0,说明 mid 在第 2 行的第 0 列(对应元素 23)。
相关推荐
不正经学生12 小时前
C语言大小端字节序:内存里字节的排列顺序
c语言·开发语言·arm开发·c++·算法·c#
依然鸣13 小时前
PTA团体程序设计天梯赛L2真题讲解L2-001-004
经验分享·学习·算法·深度优先·pat考试
一米阳光866113 小时前
软考(中级)软件设计师核心笔记(8)数据结构——图
数据结构·笔记·职场发展·软考·软件设计师·中级职称
杨航 AI15 小时前
** AI 面试算法 50 题清单**,不是单纯的 LeetCode 题号列表,而是按照“**考察概率 × 面试价值 × 你当前准备方向**”排序
算法·leetcode·面试
m0_7202450121 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC1 天前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯1 天前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院1 天前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李1 天前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.1 天前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展