劍指 JZ1二維陣列的查詢

2021-10-07 11:54:36 字數 1386 閱讀 3558

問題描述:

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

解題思路:

首先題意所說的二維陣列型別就是如下所示:

[[1,2,8,9]

[2,4,9,12]

[4,7,10,13]

[6,8,11,15]]

第一行從左到右依次遞增,第一列從上往下依次遞減

方法①:暴力法

直接遍歷陣列的每乙個元素,如果找到target就返回true。

class solution:

# array 二維列表

def find(self, target, array):

# write code here

for i in range(len(array)):

for j in range(len(array[0])):

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

return true

return false

s = solution()

print(s.find(7, [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]))

方法②:從左下角元素進行尋找

左下角元素,即最後一行第一列的元素,該元素是最後一行中最小的,並且也是第一列中最大的。如果該值為target,則直接返回true;如果該值小於target,由於該列中不存在比這個值大的元素,所以向同一行下乙個元素繼續尋找;同理,如果值小於target,那麼向同一列的上乙個元素繼續尋找。

class solution:

# array 二維列表

def find(self, target, array):

# write code here

m = len(array) - 1; n = 0

rows = len(array); cols = len(array[0])

while m >= 0 and n < cols:

if array[m][n] == target:

return true

elif array[m][n] < target:

n += 1

else:

m -= 1

return false

s = solution()

print(s.find(7, [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]))

JZ1 二維陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。本題給了兩個引數乙個是二維陣列,乙個是尋找的值。那麼只需要遍歷陣列對沒乙個資料進行判斷即可。如果找到返回真,反...

JZ1 二維陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。輸入 7,1,2 8,9 2 4,9 12 4,7 10,13 6 8,11 15 返回值 複雜度分析 思路 ...

1 劍指offer 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。兩種思路 一種是 把每一行看成有序遞增的陣列,利用二分查詢,通過遍歷每一行得到答案,時間複雜度是nlogn p...