二维数组中的查找
问题描述:
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
解题思路
观察法
- 观察题目数组中元素的特点,从右上角开始查找,如果相等则返回
true
,如果小于target
,则在当前一行的下面进行搜索,如果大于target
,则在当前一列的左边进行搜索 - 时间复杂度:
O(m+n)
,空间复杂度:O(1)
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
return false;
int m = matrix.length, n = matrix[0].length;
int row = 0, col = n - 1;
while (row < m && col >= 0) {
if (matrix[row][col] == target)
return true;
if (matrix[row][col] < target)
row++;
else
col--;
}
return false;
}
}