每日一刷-剑指offer-python版-第一题,二维数组查找数据
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解法1,暴力查找
class Solution:
# array 二维列表
def Find(self, target, array):
for i in range(len(array)):
for j in range(len(array[0])):
if target == array[i][j]:
return True
return False
解法2,利用题目信息,每行元素递增,每列元素也递增
思路:二维数组模拟为矩阵,每次取矩阵最右上角的值
若target值等于该值时,则找到数据
若target值小于该值时,由于列元素递增属性,即可剔除该列数据(列索引 j-1)
若target值大于该值时,由于行元素递增属性,即可剔除该行数据(行索引 i+1)
class Solution:
# array 二维列表
def Find(self, target, array):
row = len(array)
col = len(array[0])
i = 0
j = col-1
while i<row and j>=0:
if target<array[i][j]:
j = j-1
elif target>array[i][j]:
i = i+1
elif target==array[i][j]:
return True
return False