

1.暴力法O(m*n)
思路:两层for循环即可。
2.二分查找O(m*logn)
思路:每行都用二分查找,因为每行都是排好序的
java
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for(int[] row : matrix){
if(search_t(row,target)){
return true;
}
}
return false;
}
public boolean search_t(int[] nums,int t){
int l=0;
int r=nums.length-1;
while(l<=r){
int mid=(r-l)/2+l;
if(nums[mid]==t){
return true;
}
if(nums[mid]>t){
r=mid-1;
}
if(nums[mid]<t){
l=mid+1;
}
}
return false;
}
}
3.Z字搜索
思路
因为每行都是递增的,每列也是递增的,所以我们可以选择从右上角开始遍历,遇到大于target的那就向左走,遇到小于target那就向下走。
具体代码
java
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int n=matrix[0].length;
int x=0;
int y=n-1;
while(x<=matrix.length-1 && y>=0){
if(matrix[x][y]==target){
return true;
}
if(matrix[x][y]>target){
y--;
}
else{
x++;
}
}
return false;
}
}