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