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;
};
相关推荐
海清河晏1112 小时前
数据结构 | 单循环链表
数据结构·算法·链表
wuweijianlove6 小时前
算法性能的渐近与非渐近行为对比的技术4
算法
_dindong6 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
AI成长日志6 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
黎阳之光6 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
skywalker_116 小时前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode
6Hzlia6 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
wfbcg7 小时前
每日算法练习:LeetCode 209. 长度最小的子数组 ✅
算法·leetcode·职场和发展
_日拱一卒7 小时前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾7 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio