题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
对输入的条件进行判断,没有正确输入的话做出提示。
- 矩阵是有序的,从右上角开始看起
- 如果目标数大于当前数,说明目标数在当前数下方,行数++;
- 如果目标数小于当前数,说明目标数在当前数的左侧,列数--;
- 这样每一次查找都可以排除一行或者一列。
代码:
public class Main {
public static void Find(int target, int [][] array) {
//输入条件判断
if( array == null || array.length < 1 || array[0].length < 1) {
System.out.println("请输入正确条件");
}
int rows = array.length; //数组行数
int columns = array[0].length; //数组列数
int row = 0,coulmn = columns - 1;
System.out.println(rows);
while (row < rows && coulmn >= 0){
if (array[row][coulmn] == target) { //与查找的数相等
System.out.println("该数在第" + row +"行第" + coulmn + "列");
break;
}else if (target > array[row][coulmn]) { //目标数大于当前数组的数,说明目标数在下方,行数++
row ++;
}else {
coulmn --; //目标数小于当前数组的数,说明目标数在左方,列数--
}
}
}
public static void main(String[] args) { //测试
int[][] arr = {
{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15}
};
Find(7,arr);
}
}