240. 搜索二维矩阵 II

题目:编写一个高效的算法来搜索 m xn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

方法一:二分查找

思路:在暴力的基础上,用二分查找降低时间复杂度

复制代码
/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var searchMatrix = function(matrix, target) {
    //二分查找
    for(const row of matrix){
        const index = search(row,target);
        if(index>=0){
            return true;
        }
    }
    return false;
};

const search = (nums,target)=>{
    let low = 0,high = nums.length-1;
    while(low<=high){
        const mid = Math.floor((high+low)/2);
        const num = nums[mid];
        if(num===target){
            return mid;
        }else if(target>num){
            low = mid+1;
        }else{
            high = mid-1;
        }
    }
    return -1;
}

方法二:Z形查找

思路:从矩阵的右上角开始查找,以矩阵左下角构建新的查找矩阵,分两种情况,一是右上角元素大于target,由于列递增,所以列的索引减一,二是右上角元素小于target,由于行递增,所以行索引加一。

复制代码
/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var searchMatrix = function(matrix, target) {

    if(matrix.length===0||matrix[0].length===0){
        return false;
    }

    let row = 0;
    let colum = matrix[0].length-1;

    while(row<matrix.length&&0<=colum){
        if(matrix[row][colum]>target){
            colum--;
        }else if(matrix[row][colum]<target){
            row++;
        }else{
            return true;
        }
    }
    return false;
};
相关推荐
罗西的思考3 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer3 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
高晶5 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy5 小时前
大数计算思路
算法
高晶5 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
学电子她就能回来吗5 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode
用户老李5 小时前
反向传播计算梯度举例
算法
niyongsheng5 小时前
多智能体连续时间内路径规划:AA-SIPP(m) 的 Rust 实现与算法
算法·rust·机器人
302wanger6 小时前
DeepSeek-V4.1-Flash-1017 免费用到1024,速来
算法
lisw057 小时前
微分与积分的本质区别解析
算法·数学建模·极限编程