題目:
在乙個 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...