题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
首先,我们将要查找的数字(命为tag)与右上角的数字比较。a.如果相等,则查找结束。b.如果tag小,那么删除一列。c.如果tag大,那么删除一行。所以我们可以这样缩小范围。
Python实现
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : MarkXu
def find(tag, array):
rows = len(array) # 获取二维数组的行数
cols = len(array[0]) # 获取二维数组的列数
# 定义二维数组的两个索引,这里取[0][cols-1]即为右上角的数字
i = 0
j = cols - 1
# 注意终止条件
while i<=rows-1 and j>=0:
if tag < array[i][j]:
# 删除一列,也就是j-1
j -= 1
elif tag > array[i][j]:
# 删除一行,注意,这里的删除是指向下增加,即i+1
i += 1
else:
return True
return False
if __name__ == "__main__":
array = [[1, 2, 8,9],
[2, 4, 9, 12],
[4, 7, 10, 13],
[6, 8, 11, 15]]
tag = 5
print(find(tag, array))