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;
    }
};
相关推荐
lihihi31 分钟前
P1209 [USACO1.3] 修理牛棚 Barn Repair
算法
weixin_387534221 小时前
Ownership - Rust Hardcore Head to Toe
开发语言·后端·算法·rust
xsyaaaan1 小时前
leetcode-hot100-链表
leetcode·链表
庞轩px1 小时前
MinorGC的完整流程与复制算法深度解析
java·jvm·算法·性能优化
Queenie_Charlie1 小时前
Manacher算法
c++·算法·manacher
闻缺陷则喜何志丹1 小时前
【树的直径 离散化】 P7807 魔力滋生|普及+
c++·算法·洛谷·离散化·树的直径
AI_Ming1 小时前
Seq2Seq-大模型知识点(程序员转行AI大模型学习)
算法·ai编程
若水不如远方1 小时前
分布式一致性(六):拥抱可用性 —— 最终一致性与 Gossip 协议
分布式·后端·算法
计算机安禾1 小时前
【C语言程序设计】第35篇:文件的打开、关闭与读写操作
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
Wect1 小时前
React Hooks 核心原理
前端·算法·typescript