题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目链接
解题思路
思路一:
一般这种多维数组的搜索主要采用深度优先搜索(DFS)或者深度优先搜索(BFS)。
时间复杂度:O(n2),空间复杂度:O(1)
思路二:
思路一,虽然简单明了,但是没有充分利用题目所给的条件。
题目中给定二维数组的元素满足从左往右,从上往下依次递增。这个时候我们可以选择右上角(左下角)开始搜索,由于题目满足的条件,我们可以发现,当右上角的数大于target时,则该元素下方的任何元素都大于target,则此时在左侧寻找,当右上角元素小于target时,则该元素左边的任何元素都小于target,则先下侧寻找。循环上述过程,知道找到target,或者遍历完所有的行和列。
还可以选择左下角的元素作为起始元素。分析过程于上述相似
时间复杂度:O(n),空间复杂度:O(1)
python 实现
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, matrix):
# write code here
if len(matrix) <=0 or len(matrix[0])<=0: return False
rows = len(matrix)
cols = len(matrix[0])
col,row = cols-1,0
while col >=0 and row <rows:
if matrix[row][col] is target :return True
elif matrix[row][col] >target: col -=1
else :row += 1
return False