1.题目描述
2.最优思路
由于二维数组具有的特殊递增性,在进行查找时,需要动点小脑筋!
算法:
- 从二维数组的右上角开始查找。如果当前元素等于目标值,则返回
true
。如果当前元素大于目标值,则移到左边一列。如果当前元素小于目标值,则移到下边一行。- 若数组为空,返回 false
- 初始化行下标为 0,列下标为二维数组的列数减 1
- 重复下列步骤,直到行下标或列下标超出边界
- 获得当前下标位置的元素 num
- 如果 num 和 target 相等,返回 true
- 如果 num 大于 target,列下标减 1
- 如果 num 小于 target,行下标加 1
- 循环体执行完毕仍未找到元素等于 target ,说明不存在这样的元素,返回 false`
3.代码
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
//特值处理
if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
return false;
int rowLen = matrix[0].length; //行的长度
int columnLen = matrix.length; //列的长度
int row = rowLen - 1; //从第一行的最后一个数开始
int column = 0;
while(row >=0 && column < columnLen){
//得到当前的数
int temp = matrix[column][row];
if(temp == target)
return true;
if(temp < target){
//代表在下一行,
column++;
}
if(temp > target){
//则向左移一列
row--;
}
}
//找到最后都没有找到
return false;
}
}