劍指offer 二維陣列中查詢

2022-06-25 09:30:15 字數 1705 閱讀 2417

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

示例如下:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

思路有三種,一種是暴力演算法,這種要求不高,但是對程式開銷要求大,即每乙個陣列元素都得遍歷一遍,這裡就不用細說了,會寫雙重迴圈就可以。

第二種是我採取的思路,利用折半查詢:先確定目標指所在的陣列,比如在二維陣列的 array[3]裡,然後再在array[3]裡利用折半查詢查目標值

從矩陣左下角開始(右上角也可以,但是走的方式就不一樣了),查詢下乙個目標,大於則向上走,小於則向右走,十分形象,而且有點像資料結構裡面對有序二叉樹的遍歷,把整個矩陣當作有序資料結構,而不是只利用一維有序來進行查詢,非常有新意,比較佩服所以記錄在這裡,而且我自己也更加傾向第三種演算法。

折半查詢python實現方法:

1

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

2class

solution:34

deffind(self,target,array):

5if len(array)==0 or len(array[0])==0:

6return

false

7for x in array:#

折半查詢

8if x[0]<=target<=x[-1]:

9 lindex=0#

左下標10 rindex=len(x)-1#

右下標11

while lindex<=rindex:

12 mid=(lindex+rindex)/2#

陣列中間位置元素

13if x[mid]==target:

14return

true

15if x[mid]>target:

16 rindex=mid-1

17else

:18 lindex=mid+1

19return

false

2021

路徑的方式實現方法:

1

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

2class

solution:3#

array 二維列表

4def

find(self, target, array):5#

write code here

6 rows = len(array) - 1

7 cols= len(array[0]) - 1

8 i =rows

9 j =0

10while j<=cols and i>=0:

11if target12 i -= 1

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

14 j += 1

15else:16

return

true

17return false

劍指offer 二維陣列中查詢

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

劍指offer 二維陣列中查詢

從今天開始每天一題,除了節假日。在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution return false class solut...

二維陣列查詢(劍指offer)

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解法一 因為每一行都是遞增的,直接對每一行進行二分查詢即可。public class solution if ...