题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析
1.暴力遍历法(最容易想到)
通过遍历该二维数组中的每一个元素,并与target进行比较,相等返回true,不等返回false;
2.左上查找法
3.右下查找法
代码
public class Solution {
public boolean Find(int target, int [][] array) {
//1.暴力遍历法
/*int n = array.length;
if(n <= 0){
return false;
}
for(int i = 0;i < n;i++){
for(int j = 0; j < array[i].length;j++){
if(target == array[i][j]){
return true;
}
}
}
return false;*/
//2.左上查找法
/* int rows = array.length;//获取二维数组的行数
if(rows <= 0){
return false;
}
int cols = array[0].length;//获取二维数组的列数
if(cols <= 0){
return false;
}
int row = rows-1;//(row,col)表示二维数组左下角元素
int col = 0;
while(row >= 0 && col < cols){
if(array[row][col] < target){
col++;
}else if(array[row][col] > target){
row--;
}else{
return true;
}
}
return false; */
//3.右下查找法
int rows = array.length;
if(rows <= 0){
return false;
}
int cols = array[0].length;
if(cols <= 0){
return false;
}
int row = 0;//(0,cols-1)表示二维数组的右上角元素
int col = cols-1;
while(row < rows && col >= 0){
if(array[row][col] > target){
col--;
}else if(array[row][col] < target){
row++;
}else{
return true;
}
}
return false;
}
}