劍指offer 04 二位陣列中的查詢

2021-10-24 00:22:41 字數 978 閱讀 3159

題目:

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

解題**一:二層遍歷,時間複雜度o(mn)

# -*- coding:utf-8 -*-

class solution:

# array 二維列表

def find(self, target, array):

# write code here

m,n=len(array),len(array[0])

for i in range(m):

for j in range(n):

if array[i][j]==target:

return true

return false

解題**二:先與左下角或者右上角的值先比較。若target>右上角的值,則可以先排除第一行,剩餘三行;若target《右上角,則排除最後一列,剩餘三列

# -*- coding:utf-8 -*-

class solution:

# array 二維列表

def find(self, target, array):

# write code here

m,n=len(array),len(array[0])

row=0

col=n-1 #右上角的值

while(row=0):

if array[row][col]target:

col-=1

else:

return true

return false

時間複雜度:o(n+m)。訪問到的下標的行最多增加 n 次,列最多減少 m 次,因此迴圈體最多執行 n + m 次。

空間複雜度:o(1)。

二位陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。假設陣列 array 如下 128 9249 124710 136811 15public class sol...

牛客劍指offer 1 二位陣列中的查詢

借助於二分搜尋的拓展。詳見官方題解 以右上角的元素為基準,若attrtag,tag必定不在attr的正下方,範圍縮減一列,attr左移一格 直至查遍所有元素。這種做法,每次縮減一格或一行,最壞情況下,時間複雜度為o m n m,n為陣列行數和列數。如下 public class solution r...

C語言二位陣列

前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...