版权声明:我是小仙女 转载要告诉小仙女哦 https://blog.csdn.net/qq_40210472/article/details/88651444
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
首先:遇到查找题,我们是想先遍历所有的值,来确定target是否在array 中,问题就转换成了二维列表的遍历。
我使用了简单粗暴的两层for 循环来进行遍历,利用列表句柄的算法
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
#print(n)
for i in array:
for j in i:
if j == target:
return True
return False
以上是正确的结果,但是我也是踩了坑,比如我试图去使用range 循环遍历所有的数字,但是我忽略了在python列表中每一个列表的长度可以是不一样的,所以用range时容易出现 以下 error:
list out of range
上面的算法简单而且能通过测试,但是复杂度还是很大
我们要需要再考虑到其中提到的顺序大小问题,左边比右边小
上边比下面的小,所以可以考虑从右顶点作为第一个点
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
rows = len(array)
cols = len(array[0])
i = rows
j = 0
while i>=0 and j<=cols:
if target<array[i][j]:
i-=1
elif target>array[i][j]:
j+=1
else:
return true
return false