题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:每行从左往右递增;每列从上往下递增。此时左上角的值最小,右下角的值最大。此时可以从右上角开始,比target小,就往下走,大就往左走,相等就跳出循环。循环截止的条件是 走到左下角。即i(行)小于最大行数,j(列)大于-1。
public boolean Find(int target, int [][] array) {
int hang_len = array.length;
int lie_len = array[0].length;
int i=0, j = lie_len-1;
boolean flag = false;
while((i<hang_len)&&(j>=0)) {
int num = array[i][j];
if(target<num) {
j--;
}
else if(target>num) {
i++;
}
else {
flag = true;
break;
}
}
if(flag)
return true;
else
return false;
}