《劍指offer》(面試題3) 二維陣列中的查詢

2021-08-15 03:34:44 字數 1493 閱讀 8595

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

當我們需要解決乙個複雜的問題時,乙個很有效的辦法就是從乙個具體的問題入手,通過分析簡單具體的例子,試圖尋找普遍的規律。

首先我們選取陣列右上角的數字9。由於 9 大於 7,並且 9 還是第四列的第乙個(也是最小的)數字,因此 7 不可能出現在數字 9 所在的列。於是我們把這一列從需要考慮的區域內剔除,之後只需要分析剩下的 3 列。在剩下的矩陣中,位於右上角的數字是 8。同樣 8 大於 7,因此 8 所在的列我們也可以剔除。接下來我們只要分析剩下的兩列即可

總結上述查詢的過程,我們發現如下規律:首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或者一列,這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,或者查詢範圍為空。

python **實現:

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

class solution:

# array 二維列表

def find(self, target, array):

# write code here

row=len(array)

col=len(array[0])

if row > 0 and col > 0:

i = 0

j = col -1

while i < row and j >= 0:

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

return true

elif array[i][j] > target:

j = j - 1

else:

i = i + 1

return false

c **實現:

bool find(int* matrix, int rows, int columns, int number)

else if (matrix[row * columns + column] > number)

--column;

else:

++row;}}

return found

}

考察應聘者分析問題的能力。當應聘者發現問題比較複雜時,能不能通過具體的例子找出其中的規律,是能否解決這個問題的關鍵所在。

這個題目只要從乙個具體的二維陣列的右上角開始分析,就能找到查詢的規律,從而找到解決問題的突破口。

劍指offer 面試題3 二維陣列的查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution else if array row col target col else row return ...

劍指offer面試題3 二維陣列查詢問題

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。暴力破解方式也就是對二維陣列中的每個元素逐個檢查,結束條件為找到和目標值相等的元素或者查詢到最後乙個元素。對於乙個行列數都為n的二維陣...

劍指offer面試題 二維陣列的查詢

思路 當我們看到這道題的第一反應應該是遍歷這個二維陣列,逐個進行查詢,這樣雖然可以得到結果但是時間複雜度較大,並且沒有用到題目中給我們的線索,我們可以看到該二維數字是按照一定順序排列的。我們可以把這個四行四列的二維陣列看做乙個4 4的方格,先找出右上角的數字,如果右上角的數字是我們要找的數字就結束,...