题意: 从一个二维数组中找出是否存在某一个值,数组特征,每一行从左到右依次增大并且下一行的第一个数字大于上一行的最后一个数字
思路: 不知道直接暴力能不能过,不过可以想到,利用数组的特征,将目标数字与每一行末尾的数字进行比较能够找到目标数字所在的行,然后在遍历该行即可,时间复杂度O(m+n)
代码:
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0){
return false;
}
int row = -1, hei = matrix.length, wid = matrix[0].length;
for(int i = 0; i < hei; ++i){
if(target <= matrix[i][wid - 1]){
row = i;
break;
}
}
if(row == -1){
return false;
}
for(int i = 0; i < wid; ++i){
if(target == matrix[row][i]){
return true;
}
}
return false;
}