LeetCode热题100——240.搜索二维矩阵 II(题目+题解+答案)

题目:

编写一个高效的算法来搜索 m ×n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。

  • 每列的元素从上到下升序排列。

示例 1:

输入: matrix = \[1,4,7,11,15,2,5,8,12,19,3,6,9,16,22,10,13,14,17,24,18,21,23,26,30], target = 5
**输出:**true

示例 2:

输入: matrix = \[1,4,7,11,15,2,5,8,12,19,3,6,9,16,22,10,13,14,17,24,18,21,23,26,30], target = 20
**输出:**false

题解:

方法:逐行二分查找

由于矩阵的每一行都是升序排列的,我们可以利用这一性质,对每一行分别进行二分查找,判断 target 是否存在于该行中。

具体步骤:

1.获取矩阵的行数 m 和列数 n。

2.遍历每一行(i = 0 到 m-1):

  • 若 target 小于当前行的第一个元素,或者大于当前行的最后一个元素,说明目标值不可能存在于这一行,直接跳过(剪枝)。
  • 否则,对该行使用二分查找(binary_search)判断 target 是否在该行中。
  • 若找到,立即返回 true。

3.若遍历完所有行都没有找到,返回 false。

binary_search函数:

binary_search 是 C++ 标准库 <algorithm> 中提供的一个二分查找函数,用于在有序区间内快速判断某个值是否存在。

cpp 复制代码
bool binary_search( ForwardIt first, ForwardIt last, const T& value );
bool binary_search( ForwardIt first, ForwardIt last, const T& value, Compare comp );
参数说明:
  • first, last:指定要搜索的区间 [first, last)(左闭右开)。区间内的元素必须已经按升序(或指定的比较规则)排好序。
  • value:要查找的目标值。
  • comp:可选的比较函数(或函数对象),用于定义元素间的顺序关系。默认使用 operator<。
返回值

如果区间内存在元素与 value 相等(按比较规则等价),返回 true;否则返回 false。

答案:

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=matrix.size();//行数
        int n=matrix[0].size();//列数
        for(int i=0;i<m;i++){
            //剪枝:若目标值小于当前行最小值 或 大于当前行最大值,则跳过
            if(target<matrix[i][0]||target>matrix[i][n-1]) continue;
            //在当前行进行二分查找
            if(binary_search(matrix[i].begin(),matrix[i].end(),target))
                return true;
        }
        return false;
    }
};
相关推荐
NiceCloud喜云4 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉5 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
cjhbachelor5 小时前
c++继承
c++
3DVisionary5 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
好评笔记5 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466855 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
肩上风骋5 小时前
C++14特性
开发语言·c++·c++14特性
sheeta19985 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode
_日拱一卒5 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
珂朵莉MM6 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--束搜索
人工智能·算法