解法1:属于比较传统的不转弯的解法,时间复杂度以及空间复杂度比较大
public class Solution {
public boolean Find(int target, int [][] array) {
if(array.length==0){
return false;
}
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(array[i][j]==target){
return true;
}
}
}
return false;
}
}
解法2:从左下角开始搜
public static boolean Find(int target, int [][] array) {
int length=array.length-1;
int i=0;
while(length>=0&&(i<array[0].length)){ //从左下角开始搜索
if(array[length][i]<target){
i++;
}else if(array[length][i]>target){
length--;
}else{
return true; //就是该值了
}
}
return false;
}
解法3:和解法1类似,因为从左到右是有序的,所以每一行用二分查找