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;
};
相关推荐
致Great1 小时前
Pi 的上下文压缩,到底是怎么工作的?
算法
wuyk5552 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
watersink2 小时前
机器学习聚类算法
算法·机器学习·聚类
luj_17683 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
饼饼学习空间智能4 小时前
家庭服务机器人训练数据怎么积累?仿真、真实采集与持续学习的技术路线分析
人工智能·算法·机器学习
en.en..5 小时前
数据结构考点解析:逻辑闭环与存储循环辨析
数据结构
蛋先生DX6 小时前
你瘦不下来但大模型可以:量化原理了解一下
深度学习·算法·llm
牛阿大7 小时前
LQR算法
算法
(╹◡╹)7 小时前
18.剪枝
算法·机器学习·剪枝