二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
代码:
- /**
- * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
- * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- * <p/>
- * 规律:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束:
- * 如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行。
- * 也就是说如果要查找的数字不在数组的右上角,则每-次都在数组的查找范围中剔除)行或者一列,这样每一步都可以缩小
- * 查找的范围,直到找到要查找的数字,或者查找范围为空。
- *
- * @param matrix 待查找的数组
- * @param number 要查找的数
- * @return 查找结果,true找到,false没有找到
- */
public class Solution {
public static boolean Find(int [][] array,int target) {
//输入条件判断
if(array == null || array.length < 1 || array[0].length<1){
return false;
}
int rows = array.length; //二维数组的行数
int cols = array[0].length; //二维数组的列数
int row = 0; //起始的行号
int col = cols-1; //起始的列号
while(row >= 0 && row < rows && col >= 0 && col <cols){
if(array[row][col] == target){ //如果找到待查的数就退出
return true;
}else if(array[row][col]>target){ //如果当前的数比待查的数大,则待查的数在当前的数的左边
col--; //列数减1,当前的数往左移
}else{
row++; //如果当前的数比待查的数小,则待查的数在当前行的下方行数加1,当前的数往下移一行
}
}
return false;
}
public static void main(String[] args){
int [][] array={{1,3,5,7,9},
{2,4,6,8,10},
{3,5,7,9,11},
{4,6,8,10,12}};
System.out.println(Find(array,3)); //要查找的数在数组中
System.out.println(Find(array,13)); //要查找的数不在数组中
}
}