剑指Offer(一)
二维数组中的查找
题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
由于二维数组每一行递增且每一列递增,那么可以从数组的两个对角数其中一个开始查找,此处代码中是从右上角开始查找。若目标数小于此数,那么最后一列即可排除,列数减一继续查找;如果目标数等于此数,那么返回True;如果目标数大于此数:那么该行即可排除,行数加一继续查找,继续循环。循环结束未找到即返回False。
代码如下:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
rows = len(array)
cols = len(array[0])
if rows>0 and cols>0:
row=0
col=cols-1
while row<rows and col>=0:
if target==array[row][col]:
return True
elif target<array[row][col]:
col-=1
else:
row+=1
return False