【力扣】240.搜索二维矩阵 II

题目

我的代码

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        for(int i=0;i<matrix.size();i++){
            for(int j=0;j<matrix[0].size();j++){
                if(target==matrix[i][j]){
                    return true;
                }else if(target<matrix[i][j]){
                    break;
                }
            }
            if(matrix[i][0]>target){
                break;
            }
        }

        return false;
    }
};

Z字搜索法

我的解法实在招笑,自以为优化了,其实优化了个寂寞,一看答案惊为天人。

思路:

我们可以从矩阵 matrix 的右上角 (0,n−1) 进行搜索。在每一步的搜索过程中,如果我们位于位置 (x,y),那么我们希望在以 matrix 的左下角为左下角、以 (x,y) 为右上角的矩阵中进行搜索,即行的范围为 [x,m−1],列的范围为 [0,y]:

如果 matrix[x,y]=target,说明搜索完成;

如果 matrix[x,y]>target,由于每一列的元素都是升序排列的,那么在当前的搜索矩阵中,所有位于第 y 列的元素都是严格大于 target 的,因此我们可以将它们全部忽略,即将 y 减少 1;

如果 matrix[x,y]<target,由于每一行的元素都是升序排列的,那么在当前的搜索矩阵中,所有位于第 x 行的元素都是严格小于 target 的,因此我们可以将它们全部忽略,即将 x 增加 1。

在搜索的过程中,如果我们超出了矩阵的边界,那么说明矩阵中不存在 target。

代码与AC截图

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=0;
        int n=matrix[0].size()-1;

        while(m<matrix.size()&&n>=0){
            if(target==matrix[m][n]){
                return true;
            }else if(target<matrix[m][n]){
                n--;
            }else{
                m++;
            }
        }

        return false;
    }
};
相关推荐
Omics Pro3 分钟前
端到端单细胞空间组学数据分析
大数据·数据库·人工智能·算法·数据挖掘·数据分析·aigc
迈巴赫车主4 分钟前
错位排序算法
开发语言·数据结构·算法·排序算法
炽烈小老头6 分钟前
【每日天学习一点算法 2026/03/31】不同路径
学习·算法
Darkwanderor6 分钟前
搜索优化——迭代加深dfs
c++·算法·深度优先·迭代加深
计算机安禾18 分钟前
【数据结构与算法】第17篇:串(String)的高级模式匹配:KMP算法
c语言·数据结构·学习·算法·visual studio code·visual studio·myeclipse
大萌神Nagato20 分钟前
力扣HOT100 Q146LRU缓存
算法·leetcode·缓存
源码之家26 分钟前
大数据毕业设计汽车推荐系统 Django框架 可视化 协同过滤算法 数据分析 大数据 机器学习(建议收藏)✅
大数据·python·算法·django·汽车·课程设计·美食
Boop_wu26 分钟前
[Java 算法] 哈希表(1)
leetcode·哈希算法·散列表
nianniannnn28 分钟前
力扣 3.无重复字符的最长子串
c++·算法·leetcode
IT大师兄吖42 分钟前
flux-2-Klein-BFS-换头换脸工作流 懒人整合包
算法·宽度优先