题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]]
给定 target = 7,返回 true。
给定 target = 3,返回 false。
解法一:双层循环对二维列表进行遍历,但是时间复杂度比较高。
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
for i in range(len(array)):
for j in range(len(array[i])):
if array[i][j] == target:
return True
return False
解法二:从二维数组的右上角开始查找,因为在这个位置,左侧的数比他小,右侧的数比他大,从左下角开始同理。但是不能从左上角和右下角开始。
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
#从右上角开始搜索,左侧的数比当前小,下侧的数比当前大
m = len(array)
n = len(array[0])
i = 0
j = n-1
while i < m and j >= 0:
if array[i][j] == target:
return True
elif array[i][j] > target:
j -= 1
else:
i += 1
return False