js一刷暴力
javascript
var searchMatrix = function(matrix, target) {
for(let i=0;i<matrix.length;i++){
if(matrix[i][matrix[0].length-1]<target) continue;
let left=0,right=matrix[0].length-1;
let mid= Math.floor((left + right) / 2);
while(left<=right){
if(matrix[i][mid]===target) return true;
if(matrix[i][mid]>target){
right=mid-1;
mid = Math.floor((left + right) / 2);
}else if( matrix[i][mid]<target){
left=mid+1;
mid= Math.floor((left + right) / 2);
}
}
}
return false;
};
js一刷 优化
javascript
var searchMatrix = function(matrix, target) {
if (!matrix || !matrix.length) return false;
let right=matrix[0].length-1;
let top=0;
while(right>=0&&top<=matrix.length-1){
if(matrix[top][right]<target) top++;
else if(matrix[top][right]>target) right--;
else return true;
}
return false;
};
其中第二种方法的算法核心:
只关注矩阵的右上角,如果它小于target,且它的一行中最大的,则去掉这一行,若大于target且它是这一列中最小的,则去掉这一列,直到找到为止