题目
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
本质还是暴力解法,减少了遍历不可能行和列的操作
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int i = 0,n ,m;
if (matrix.length == 0 || matrix[0].length < 1)//防止空数组测试用例
return false;
n = matrix.length;//获取数组行数
m = matrix[0].length;//列数
int maxValue = matrix[n - 1][m - 1];//最大值
int minalue = matrix[0][0];//最小值
for (; i < n; i++) {//筛选行
if(target == matrix[i][m - 1])
return true;
else if (target < matrix[i][m - 1]) {
break;
}
}
if(i >= n)
return false;
int target_i = i;
int target_j = 0;
for (int j = 0; j < m ; j++) {//筛选列
if(matrix[n - 1][j] == target)
return true;
else if (matrix[n - 1][j] > target) {
target_j = j;
break;
}
}
for (int a = target_i;a < n;a++){//逐个找
for(int b = target_j;b < m;b++){
if(matrix[a][b] == target)
return true;
}
}
return false;
}
}