题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
嗯,这道题就是在找规律啦!
在每次的分析中,都找右上角的数字(也可以左下角的),这样的好处是可以防止重叠区域的出现。
如果右上角的数字等于target那么就找到了
如果右上角的数字大于target,那么根据题意,该列的其余数字也大于target,所以此时应该将列数-1,往前面那一列去比较,此时右上角的数字就是倒数第二列、第一行的数字。
如果右上角的数字小于target,那么该行都小于target(右边的列可以不用比较啦),可以累加一行往下走啦
嗯就是这样啦!!!
public class Solution {
public boolean Find(int target, int [][] array) {
//行数
int rows = array.length;
//列数
int columns = array[0].length;
boolean find = false;
int i,j;
for(i = 0,j = columns - 1; i < rows && j >= 0 ;){
// for(j = columns - 1; j >= 0 ;){
//右上角的数字如果等于target
if(array[i][j] == target)
return true;
//右上角的数字如果大于target,则只可能在前几列中
else if(array[i][j] > target){
j--;
}
//右上角的数字小鱼target
else{
i++;
}
}
return false;
}
}