zoukankan      html  css  js  c++  java
  • 白菜刷LeetCode记-240.Search a 2D Matrix II

    今天是一道中等题目,题目如下:

    第一种想到的办法是遍历每一行,每一行使用二分查找的方法进行搜索,代码如下:

    /**
     * @param {number[][]} matrix
     * @param {number} target
     * @return {boolean}
     */
    var searchMatrix = function(matrix, target) {
        let m = matrix.length;
        let n = m > 0 ? matrix[0].length:0;
        
        if( n <= 0 ) return false;
        
        
        
        for(let i = 0 ; i < m ; i++){
            let lp = 0, rp = n - 1;
    
            while(lp <= rp){
                let mid = parseInt((lp+rp)/2);
                
                if(target < matrix[i][mid]){
                    rp = mid - 1;
                }
                if(target > matrix[i][mid]){
                    lp = mid + 1;
                }
                if(target == matrix[i][mid]){
                    return true;
                }
            }
        }
        
        return false;
    };

    但是是否有更加快速的方法呢,上网被启发了一下,从矩阵的右上角开始搜索,如果目标值比当前行最右边的大,那么就 i ++ , 否则就 j-- , 代码如下:

    /**
     * @param {number[][]} matrix
     * @param {number} target
     * @return {boolean}
     */
    var searchMatrix = function(matrix, target) {
        let m = matrix.length;
        let n = m > 0 ? matrix[0].length:0;
        let i = 0 , j = n - 1;
        
        if( n <= 0 ) return false;
        
        
        
        while( i < m && j >= 0 ){
            let tmp = matrix[i][j];
            
            if( tmp ==  target ){
                return true;
            }else if( tmp > target ){
                j--;
            }else{
                i++;
            }
            
            
        }
        
        return false;
    };

    END

  • 相关阅读:
    好玩的spring boot banner 图
    数据结构和算法二(数组)
    数据结构与算法三(链表)
    数据结构和算法一(基础知识)
    jenkins 部署node应用
    Docker-compose 安装Jenkins
    Docker 网络模式
    exe4j 转jar
    c#索引器的简单用法
    Adapter模式
  • 原文地址:https://www.cnblogs.com/sssysukww/p/9919230.html
Copyright © 2011-2022 走看看