LeetCode—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

题目解析:

因为矩阵具有单调性,所以可以将问题转化为一维数组的查找问题。具体步骤如下:

  1. 初始化 :设置两个指针lowhigh,分别指向矩阵的左上角(0,0)和右下角(m*n-1),其中m是矩阵的行数,n是矩阵的列数。

  2. 二分查找 :在lowhigh之间进行二分查找。

    • 计算中间位置mid
    • 根据mid计算出在矩阵中对应的元素x,即matrix[mid / n][mid % n]。这里mid / n计算出中间位置所在的行,mid % n计算出中间位置所在的列。
  3. 比较与调整

    • 如果x小于target,则将low指针移动到mid + 1,因为target一定在mid的右边。
    • 如果x大于target,则将high指针移动到mid - 1,因为target一定在mid的左边。
    • 如果x等于target,则返回true,表示找到了目标值。
  4. 循环结束 :如果low超过了high,则表示没有找到目标值,返回false

实现代码:

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length,n = matrix[0].length;
        int low = 0,high = m * n -1;
        while(low <= high){
            int mid = (low + high)/2;
            int x = matrix[mid / n][mid % n];
            if(x < target){
                low = mid + 1;
            }else if(x > target){
                high = mid - 1;
            }else return true;
        }
        return false;
    }
}
相关推荐
AI科技星几秒前
公理化数学化学|48小时确权终稿(完整投产包)
人工智能·数学·算法·重构·拓扑学·乖乖数学·全域数学
想你依然心痛19 分钟前
AtomCode在算法竞赛中的实战体验:LeetCode周赛辅助编程
linux·算法·leetcode
SilentSamsara24 分钟前
模型部署方案选型:REST/gRPC/批量推理/边缘部署的场景决策
人工智能·深度学习·算法·机器学习
zzz_236830 分钟前
【Java实习面试算法冲刺】哈希!
java·算法·面试
大耳朵糊涂31 分钟前
找前/后驱节点
算法
孤狼warrior36 分钟前
从冒泡到传送带流水线:一个3D沉浸式算法靶场,让思想的伟力改变世界
python·算法·typescript
bu_shuo1 小时前
计算机二级学习-查找和排序
学习·算法·排序算法
无限码力1 小时前
拼多多笔试真题-对角线遍历矩阵(C++/Py/Java /Js/Go)
矩阵·拼多多·拼多多笔试真题·拼多多技术岗笔试题目·拼多多机试
战族狼魂1 小时前
每天一课:算法系统学习路线
人工智能·算法·大模型·大语言模型
Sam09271 小时前
【AI 算法精讲 13】朴素贝叶斯:文本分类的基石
人工智能·python·算法·ai