二维数组中的查找
【题目】:
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。
给定 target = 20,返回 false。
【解题思路】:
每次从左下角或者右上角的数字开始进行比较(书中是从右上角开始)。这里我们选取左下角的数开始比较:
- 如果左下角的数等于查找数, 则返回True;
- 如果左下角的数大于查找数, 则比较同一列中的上一个数字;
- 如果左下角的数小于查找数, 则比较同一行中的右边一位的数字;
示例代码1:
def find(frid, number):
if not frid:
return False
row, col = len(frid), len(frid[0])
cur_i, cur_j = row - 1, 0
while cur_i >= 0 and cur_j < col:
if frid[cur_i][cur_j] == number:
return True
elif frid[cur_i][cur_j] > number:
cur_i -= 1
else:
cur_j += 1
return False
grid = [[1, 2, 8, 9],
[2, 4, 9, 12],
[4, 7, 10, 13],
[6, 8, 11, 15]]
grid1 = []
number = 9
obj = find(grid, number)
print(obj)
运行结果:
示例代码2:
class Solution(object):
def findNumberIn2DArray(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
for i in matrix:
if target in i:
return True
return False