劍指offer 二維陣列中的查詢

2021-09-18 07:21:44 字數 889 閱讀 2780

題目描述

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

題目分析:

由於所給的二維陣列在一定程度上是有序的,即每一行、每一列都是有序的,但是行與行之間不一定是有序的。如:

1 2 3

2 3 4

3 4 5

第二行的2和第一行的3並不是有序的。

因此,如果從左上角座標為(0, 0)開始遍歷這個二維陣列的話,如果當前的數字小於要查詢的目標數字,那麼要查詢的數字就可能出現在當前數字的右邊或左邊,導致問題變複雜。

相反,如果我們換個思路,從陣列的左下角或者右上角開始遍歷,以左下角為例,如果當前的數字小於目標數字,那麼就往右查詢,反之往上查詢。這樣每次判斷完之後只有乙個方向需要遍歷,問題就變得不複雜了。

class solution:

# array 二維列表

def find(self, target, array):

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

i, j = m - 1, 0 # 從左下角開始

while i >= 0 and j < n: # 因為我們只會往右、往上走,所以i只會減,j只會加,因此只需要保證i,j不越界即可

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

return true

if array[i][j] > target: # 目標數字比當前數字小,往上

i -= 1

else: # 目標數字比當前數字大,往右

j += 1

return false

劍指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 思路有三種,...