题目概述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
考察点:
数组、分散查找思想。
实现思路
-
比较矩阵的右上角的数与target的大小,如果target比这个矩阵右上角的数大,由于矩阵的右上角元素A是A所在行的最大的值,所以target肯定不在A所在的行了,所以这时候就应该就在除去第一行的剩下的行中去找这个target;
-
如果target比矩阵右上角的数A小,那么由于A所在的列中A是最小的,那么target就在除去最右边的列的其它的列;
如果相等,返回true;
Java代码(可以直接复制使用)
public class SelectFromArray {
public boolean find(int target, int[][] array) {
//获取二维数组的行和列的长度
int row = array.length - 1;
int col = array[0].length - 1;
//从第一行最后一列(有上角)的数开始循环比较
int i = 0;
int j = col;
while (i <= row && j >= 0) {
if (target < array[i][j]) {
//目标数比这个数小,列数-1
j--;
} else if (target > array[i][j]) {
//目标数比这个数大,行数加1
i++;
} else {
//目标数和这个数相等,返回
return true;
}
}
//找不到返回
return false;
}
}
有问题的小伙伴可以在下方留言哦