劍指Offer(1) 二維陣列的查詢

2021-08-16 09:19:51 字數 1448 閱讀 1279

題目描述

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

這道題考察的是陣列和查詢。

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

以上面的二維陣列為例,我們從具體問題出發,來找規律:

首先很多人都會想到從乙個角出發,但是從哪個角呢,其實總的來說,左上右下是相同的,而左下右上是相同的,現在我們先來嘗試下左上右下:

從這個角度的話,有一點比較方便,那就是當target小於左上時或者大於右下時就可以直接判斷target並不存在在array中,然後我們來看這種情況之外的情況,那就是target大於左上或者小於右下時:

這樣看似乎範圍是在縮小,但是這個範圍總是在兩側都有,於是問題就變得麻煩了。然後我們來看看左下和右上:

左下:如果target小於array_data,掃瞄範圍向上移一位,反之向右移,逐步縮小範圍

右上:如果target大於array_data,掃瞄範圍向下移一位,反之向左移,逐步縮小範圍

我們發現這樣的話範圍的縮小是比較有章法的,所以這樣做比較容易,下面來看下python的解答:

class

solution:

deffind

(self, target, array):

i = len(array) - 1

j = 0

while i >= 0

and j < len(array[0]):

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

print

true

return

0elif target > array[i][j]:

j+=1

else:

i-=1

return

false

pro = solution()

pro.find(10,[[1,3,5],[2,4,6]])

以後有機會可以擴充套件字元陣列的查

劍指offer 1 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。二維陣列是有序的,比如下面的資料 1 2 3 4 5 6 7 8 9可以直接利用左下角數字開始查詢 大於 比較...

劍指offer 1 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 首先是先模擬獲取隨機遞增陣列 public static int getarray int n,int m 初...

劍指Offer 1 二維陣列查詢

劍指offer 1 二維陣列查詢 馬上也要畢業開始找工作了,自己程式設計能力實屬弟弟,笨鳥先飛,雖然飛得好像也不早了,打算每天做一道吧,爭取暑假前做完。準備秋招了,目前就是在牛客網上做題為主 題目要求是這樣 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從...