题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行。每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false.
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
解题思路
首先选取数组中右上角的数字。如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则说明该数字所在的一列数字都大于要查找的数字,因此剔除该数字所在的一列数字即列下标减1;如果该数字小于要查找的数字,则说明该数字所在的一行数字都小于要查找的数字,因此剔除该数字呢所在的一行数字哦,即行下标减1。
代码实现(java)
import java.util.Scanner;
/**
* @author FengTianHao
* @version 1.0
* @since 2018/11/30 11:07
*
*/
public class Test {
public static Boolean find(int[][] matrix,int number)
{
int rows=matrix.length;//获取目标数组的行数
int colums=matrix[0].length;//获取目标数组的列数
if((matrix!=null)&&(rows>0)&&(colums>0))//判断目标数组是否为空、行数和列数是否大于0
{
int row=0;
int column=colums-1;//获得数组右上角的坐标matrix[0][coulumn-1]
while(row<rows&&column>=0)//判断当前元素是否合法即还在数组里面
{
if(matrix[row][column]==number)//判断当前元素是否为要查找的元素
{
return true;
}
else if(matrix[row][column]>number)//如果当前元素大于要查找的元素则列数减1
{
column=column-1;
}
else//如果当前元素小于要找的元素则行数加1
{
row=row+1;
}
}
}
return false;
}
public static void main(String[]args)
{
int[][] testMatrix={{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}
};
System.out.println("请输入要查找的数字:");
Scanner scanner=new Scanner(System.in);
int test=scanner.nextInt();
System.out.println(find(testMatrix,test));
}
}