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;
    }
};
相关推荐
bbblys19 分钟前
B4172 学习计划 题解
算法·动态规划
菜鸟破茧计划29 分钟前
线段树:数据结构中的超级英雄
数据结构·c++·算法
秦少游在淮海29 分钟前
leetcode - 双指针问题
算法·leetcode
光电大美美-见合八方中国芯33 分钟前
【平面波导外腔激光器专题系列】1064nm单纵模平面波导外腔激光器‌
网络·数据库·人工智能·算法·平面·性能优化
iceslime1 小时前
算法设计与分析实验题-序列对齐
数据结构·c++·算法·算法设计与分析·序列对齐
羊小猪~~1 小时前
深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)
人工智能·深度学习·算法·yolo·目标检测·机器学习·cnn
多多*1 小时前
分布式ID设计 数据库主键自增
数据库·sql·算法·http·leetcode·oracle
D_aniel_2 小时前
排序算法-希尔排序
java·算法·排序算法·希尔排序
SuperCandyXu2 小时前
leetcode0310. 最小高度树-medium
数据结构·c++·算法·leetcode
鱼嘻2 小时前
线程邮箱框架与示例
linux·c语言·开发语言·算法·php