在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。時間限制:1秒 空間限制:32768k
牛客網 online test
class solution:
def find(self, target, array):
for i in range(len(array)):
if array[i].count(target)>0:
return true
return false
time (ms)
memory (kb)
4436060
class solution:
def find(self, target, array):
flag = false
for index in range(len(array)):
if target in array[index]:
flag = true
return flag
time (ms)
memory (kb)
4386044
方法1和方法2都是呼叫python標準庫函式,底層實現是一樣的。
class solution:
def find(self, target, array):
for index in range(len(array)):
if target in array[index]:
return true
return false
time (ms)
memory (kb)
4035880
如果在array中有好幾個和target一樣的元素,方法1和方法2都可能遍歷到每個相同元素,而方法2改進版遍歷到第乙個相同目標元素就break了。在這種特殊情況下,方法2改進版會稍微快一點。顯然,這兩種方法都沒有利用題目所示的二維陣列的性質:
tableabc (start)de
ff (stop)gh
假設有兩個指標,分別是行和列,從右上角開始遍歷,
如果target如果target>c,則target>行,行指標下移到f;
如果target有點暈?
舉個例項
table12
8349
91012target=7
1(step 2)7>2(step 1)7<8
3(step 3)7>49
(step 5)7<9(stop)
(step 4)7<1012
不存在target=1012
(step 1)10>8
37>4
(step 2)10>9
9(step 4)10==10(stop)
(step 3)10<12
存在
class solution:
def find(self, target,array ):
nrow = len(array)
ncol = len(array[0])
row = 0
col = ncol-1
while row=0:
if target == array[row][col]:
return true
elif target > array[row][col]:
row += 1
else:
col -= 1
return false
time (ms)
memory (kb)
1825728
方法大o
方法1m*n
方法2m*n
方法3m+n-1
題目本身不限制語言的,應該是希望coder考慮時空複雜度以及陣列本身的特性。如果選擇用python,那麼方法2改進版應該是最pythonic的寫法,簡單易懂。具體選擇什麼方法取決於現實資料量的大小。如果真的要極致的performance,還是用c吧,哈哈。
劍指offer 二維陣列中查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和一 個整數,判斷陣列中是否含有該整數。public class solution 因為陣列每一行都按照從左到右遞增的順序排序,每一列都按照從上到下...
劍指offer 二維陣列中查詢
從今天開始每天一題,除了節假日。在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution return false class solut...
劍指offer 二維陣列中查詢
要求如下 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 示例如下 7,1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 思路有三種,...