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;
    }
};
相关推荐
木子.李34736 分钟前
排序算法总结(C++)
c++·算法·排序算法
闪电麦坤952 小时前
数据结构:递归的种类(Types of Recursion)
数据结构·算法
Gyoku Mint2 小时前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
纪元A梦2 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
px不是xp3 小时前
山东大学算法设计与分析复习笔记
笔记·算法·贪心算法·动态规划·图搜索算法
Bruce_Liuxiaowei3 小时前
文件上传漏洞深度解析:检测与绕过技术矩阵
安全·矩阵·文件上传漏洞
枫景Maple4 小时前
LeetCode 2297. 跳跃游戏 VIII(中等)
算法·leetcode
鑫鑫向栄4 小时前
[蓝桥杯]修改数组
数据结构·c++·算法·蓝桥杯·动态规划
鑫鑫向栄4 小时前
[蓝桥杯]带分数
数据结构·c++·算法·职场和发展·蓝桥杯