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;
};
相关推荐
退休倒计时10 小时前
【每日一题】LeetCode 15. 三数之和 TypeScript
数据结构·算法·leetcode·typescript
林爷万福10 小时前
MATLAB光谱数据分析从入门到项目实战
算法·光纤光谱仪
吴可可12310 小时前
AutoCAD2016二次开发环境配置指南
算法·机器学习
一条大祥脚11 小时前
ABC461 枚举|扫描线|动态前缀和|数论|dfs枚举子集
算法·深度优先
计算机安禾11 小时前
【数据库系统原理】第14篇:关系模式的语义约束:函数依赖的公理系统与闭包计算
人工智能·算法·机器学习
量化君也11 小时前
快速入门量化交易都要学些什么?
大数据·人工智能·python·算法·金融
AbandonForce11 小时前
滑动窗口:定长滑动窗口与不定长滑动窗口
数据结构·c++·算法
炸薯条!11 小时前
二叉树的链式表示(2)
java·数据结构·算法
Tairitsu_H11 小时前
[LC优选算法#2] 滑动窗口 | 长度最小的子数组 | 无重复字符的最长子串 | 最大连续1的个数
算法
小欣加油11 小时前
leetcode3689最大子数组总值I
c++·算法·leetcode·职场和发展·贪心算法