劍指offer 二維陣列中的查詢(Python)

2021-09-26 08:41:42 字數 2284 閱讀 4972

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

時間限制: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改進版會稍微快一點。顯然,這兩種方法都沒有利用題目所示的二維陣列的性質:

tableab

c (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 思路有三種,...