剑指 Offer 04. 二维数组中的查找
题目
在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
1 |
|
1 |
|
限制:
1 |
|
思路
Z 字形查找:
我们可以从矩阵matrix 的右.上角(0,n- 1)进行搜索。在每一步的搜索过程中, 如果我们位于位置
(x, y),那么我们希望在以matrix的左下角为左下角、以(x, y)为右上角的矩阵中进行搜索,即行的
范围为[x,m- 1],列的范围为[0, y]:
- 如果matrix[x, y] = target,说明搜索完成;
- 如果matrix[x, y]> target, 由于每一 列的元素都是升序排列的,那么在当前的搜索矩阵中,所
有位于第y列的元素都是严格大于target的,因此我们可以将它们全部忽略,即将y减少1; - 如果matrix[x, y]< target, 由于每- 行的元素都是升序排列的,那么在当前的搜索矩阵中,所.
有位于第x行的元素都是严格小于target 的,因此我们可以将它们全部忽略,即将x增加1。
在搜索的过程中,如果我们超出了矩阵的边界,那么说明矩阵中不存在target。
代码
1 |
|
剑指 Offer 04. 二维数组中的查找
http://lhystutest.top/2023/02/11/算法/剑指offer/剑指 Offer 04. 二维数组中的查找/