leetcode热题100(240. 搜索二维矩阵 II)c++

编写一个高效的算法来搜索 m xn 矩阵 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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -109 <= matrix[i][j] <= 109
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -109 <= target <= 109

思路

因为题目说每行的所有元素从左到右升序排列和每列的所有元素从上到下升序排列

所以我们知道该数组已经是单调往下递增了,就可以理解为当前元素在(i,j)这个坐标位置,那么该元素在前(i,j)坐标位置为最大值。

那么我们就可以利用这个特点,设 x表示行,y表示列。起始 x = 0,y=m-1,要是当前元素大于target,那么我们的y只能缩小了,否则小于target,x增大,要是找到等于直接返回了

代码

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& g, int target) {
        int n = g.size();
        int m = g[0].size();
        int x = 0, y = m-1;
        while(x<n && y>=0){
            if(g[x][y]==target) return true;
            if(g[x][y]>target) y--;
            else x++;
        }
        
        return false;
    }
};
相关推荐
黑屋里的马1 小时前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式
sin_hielo1 小时前
leetcode 1611
算法·leetcode
李小白杂货铺2 小时前
识别和破除信息茧房
算法·信息茧房·识别信息茧房·破除信息茧房·算法推荐型茧房·观点过滤型茧房·茧房
老兵发新帖2 小时前
【一、基础篇】自注意力机制中的 Q,K、V 矩阵是什么缩写?
线性代数·矩阵
小蜜蜂爱编程2 小时前
矩阵的运算
线性代数·矩阵
小蜜蜂爱编程2 小时前
矩阵的运算(二)
线性代数·矩阵
_李小白2 小时前
【OPENGL ES 3.0 学习笔记】第十七天:模型矩阵、视图矩阵与投影矩阵
笔记·学习·矩阵
来荔枝一大筐2 小时前
C++ LeetCode 力扣刷题 541. 反转字符串 II
c++·算法·leetcode
暴风鱼划水3 小时前
算法题(Python)数组篇 | 6.区间和
python·算法·数组·区间和
zl_vslam3 小时前
SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(一)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化