1、题目要求
在一个 N * M的二维数组中,每一行都按照从左到右的递增顺序排序,每一列都按照从上到下递增顺序排序,输入这样一个二维数组和一个整数,判断数组中是否包含该整数。
示例:
[
[1,4,7,11,15],
[2,5,8,12,19],
[3,6,9,16,22],
[10,13,14,24],
[18,21,23,30]
]
给定target = 5,返回 true
给定target = 17,返回 false
2、解题思路
是根据题目中每一行都按照从左到右的递增顺序排序,每一列都按照从上到下递增顺序排序,这两个条件,我们可以先将target和每一行的第一个进行对比,当target小于所在行的第一列的元素时,我们就不再去遍历此行。当target大于所在行的第一列就去遍历这一行,判断是否包含!
3、具体实现
public static void main(String[] args) {
int[][] matrix = {
{
1,4,7,11,15},
{
2,5,8,12,19},
{
3,6,9,16,22},
{
10,13,14,24},
{
18,21,23,30}
};
int target = 15;
boolean ble = new dem3().findNumberIn2DArray(matrix, target);
System.out.println(ble);
}
public boolean findNumberIn2DArray(int[][] matrix,int target ) {
if((matrix == null || matrix.length == 0)||(matrix.length == 1 && matrix[0].length == 0)) {
return false;
}
// matrix[i][j] 对应的是右上角开始
int i = 0, j = matrix[0].length - 1;
while(i <= matrix[0].length -1 && j >= 0) {
if(target == matrix[i][j]) {
return true;}
if(target < matrix[i][j]) {
j--;
}else {
i++;
}
}
return false;
}