二維數組中的查找
題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
思路一
將數組的每一行視爲一個新數組,進行二分法遍歷
起始點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