二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路一
将数组的每一行视为一个新数组,进行二分法遍历
起始点start 中间点mid 结尾点end
当中间点值大于目标值,则结尾点移至中间点的前一个点,反之,起始点移至中间点后一个点
运行时间215ms 占用内存5836K
代码
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
h = len(array)
for i in range(h):
array_c = array[i]
start = 0
end = len(array_c)-1
while start<=end:
mid = int((start+end)/2)
if target<array_c[mid]:
end = mid-1
elif target>array_c[mid]:
start = mid+1
else:
return True
return False
思路二
从二维数组左下角开始遍历,当值小于target则行数减1,当值大于target则列数加1
运行时间330ms 占用内存 5716k
代码
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
l = len(array)
h = l-1
w = 0
while h>=0 and w<len(array[h]):
if target<array[h][w]:
h-=1
elif target>array[h][w]:
w+=1
else:
return True
return False
思路三
递归查找 运行时间:63ms占用内存:9604k
代码
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
n=len(array)
flag='false'
for i in range(n):
if target in array[i]:
flag='true';
break
return flag
while True:
try:
S=Solution()
# 字符串转为list
#eval() 函数用来执行一个字符串表达式,并返回表达式的值。
#raw_input读取控制台的输入
L=list(eval(raw_input()))
array=L[1]
target=L[0]
print(S.Find(target, array))
except:
break