剑指offer编程题01
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析
如下图所示
以红线为对角线,处于对角线上的元素所在行的左侧都比该元素小,处于对角线上的元素所在行的右侧都比该元素大;处于对角线上的元素所在列上方元素都比该元素小,处于对角线上的元素所在列下方元素都比该元素大。
所以可以取i为行号,j为列号。i从最大开始,j从0开始,比较目标值与第行第0列的数,目标值大于该数,则j++,目标值小于该数则i–,知道找到为止。
c/c++代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rowCount = array.size();
int colCount = array[0].size();
int i,j;
for(i=rowCount-1,j=0;i>=0&&j<colCount;){
if(target==array[i][j]){
return true;
}
if(target<array[i][j]){
i--;
continue;
}
if(target>array[i][j]){
j++;
continue;
}
}
return false;
}
};
java代码:
public class Solution {
public boolean Find(int target, int [][] array) {
int rowCount = array.length;
int colCount = array[0].length;
int i,j;
for(i=rowCount-1,j=0;i>=0&&j<colCount;){
if(target==array[i][j]){
return true;
}
if(target<array[i][j]){
i--;
continue;
}
if(target>array[i][j]){
j++;
continue;
}
}
return false;
}
}