LeetCode 热题 100 JavaScript -- 74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

每行中的整数从左到右按非递减顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
LeetCode 热题 100 JavaScript -- 74. 搜索二维矩阵_第1张图片
LeetCode 热题 100 JavaScript -- 74. 搜索二维矩阵_第2张图片

/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
// 1、暴力求解
var searchMatrix = function(matrix, target) {
    var flag = 0
    for(var i = 0;i <matrix.length;i++){
        for(var j = 0;j <matrix[i].length;j++){
            if(matrix[i][j] == target){
                flag = 1
                break
            }
        }
    }
    if(flag ==1){
        return true
    }else{
        return false
    }

};

// 2、每一行进行二分法
var searchMatrix = function(matrix, target) {
    for (var i = 0; i < matrix.length; i++) {
        var left = 0;
        var right = matrix[i].length - 1;

        while (left <= right) {
            var mid = Math.floor(left + (right - left) / 2);
            if (matrix[i][mid] === target) {
                return true;
            } else if (matrix[i][mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
    }
    
    return false;
};


// 3、直接将矩阵看成一维数组然后使用二分法
var searchMatrix = function(matrix, target) {
    var m = matrix.length
    var n = matrix[0].length
    var left = 0,right = m*n-1
    while(left <=right){
        var mid = Math.floor(left+(right-left)/2)
        var r = Math.floor(mid / n);
        var c = mid % n
        if(matrix[r][c] == target){
            return true
        }else if(matrix[r][c] > target){
            right = mid-1
        }
        else{
            left = mid+1
        }
        
    }
    return false
};

你可能感兴趣的:(力扣热题100,leetcode,矩阵,算法)