public class Solution {
public boolean Find(int target, int [][] array) {
//方法一:遍历二维数组,时间复杂度:O(m*n)
// int len1 = array.length;
// //特殊值处理,空数组不可能存在目标值
// if(len1 == 0){
// return false;
// }
// int len2 = array[0].length;
// //二层循环遍历二维数组
// for(int i=0;i<len1;i++){
// for (int j=0;j<len2;j++){
// if(array[i][j] == target){
// return true; //如果存在目标值,则返回true
// }
// }
// }
// return false;
//方法二:遍历二维数组,对方法一优化
// int len1 = array.length;
// //特殊值处理,空数组不可能存在目标值
// if(len1 == 0){
// return false;
// }
// int len2 = array[0].length;
// //二层循环遍历二维数组
// int lenY = len2;
// for(int i=0;i<len1;i++){
// for (int j=0;j<lenY;j++){
// if(array[i][j] == target){
// return true; //如果存在目标值,则返回true
// }
// if(array[i][j] > target){
// if(j < lenY){
// lenY = j;
// }
// }
// if(array[i][0] > target){
// return false;
// }
// }
// }
// return false;
//方法三:利用二维行列递增特性,时间复杂度:O(m+n)
int len1 = array.length;
//特殊值处理,空数组不可能存在目标值
if(len1 == 0){
return false;
}
int len2 = array[0].length;
int x = len1-1; //最底行
int y = 0; //第一列
while (x>=0 && x<len1 && y>=0 && y<len2){//如果数组越界,则不存在目标值
if(array[x][y] == target){
return true;
}else if(array[x][y] < target){//如果目标值小于当前值,则目标值在右边,y++;
y++;
}else{//如果目标值大于当前值,则目标值在上边,x--;
x--;
}
}
return false;
}
}
public boolean Find(int target, int [][] array) {
//方法一:遍历二维数组,时间复杂度:O(m*n)
// int len1 = array.length;
// //特殊值处理,空数组不可能存在目标值
// if(len1 == 0){
// return false;
// }
// int len2 = array[0].length;
// //二层循环遍历二维数组
// for(int i=0;i<len1;i++){
// for (int j=0;j<len2;j++){
// if(array[i][j] == target){
// return true; //如果存在目标值,则返回true
// }
// }
// }
// return false;
//方法二:遍历二维数组,对方法一优化
// int len1 = array.length;
// //特殊值处理,空数组不可能存在目标值
// if(len1 == 0){
// return false;
// }
// int len2 = array[0].length;
// //二层循环遍历二维数组
// int lenY = len2;
// for(int i=0;i<len1;i++){
// for (int j=0;j<lenY;j++){
// if(array[i][j] == target){
// return true; //如果存在目标值,则返回true
// }
// if(array[i][j] > target){
// if(j < lenY){
// lenY = j;
// }
// }
// if(array[i][0] > target){
// return false;
// }
// }
// }
// return false;
//方法三:利用二维行列递增特性,时间复杂度:O(m+n)
int len1 = array.length;
//特殊值处理,空数组不可能存在目标值
if(len1 == 0){
return false;
}
int len2 = array[0].length;
int x = len1-1; //最底行
int y = 0; //第一列
while (x>=0 && x<len1 && y>=0 && y<len2){//如果数组越界,则不存在目标值
if(array[x][y] == target){
return true;
}else if(array[x][y] < target){//如果目标值小于当前值,则目标值在右边,y++;
y++;
}else{//如果目标值大于当前值,则目标值在上边,x--;
x--;
}
}
return false;
}
}