兩種方法:
第一種比較普遍的遍歷所有,那我們首先就需要確定從陣列的哪個地方開始查詢.比較好的位置就是從四個角開始搜尋.
個人選了從右上角開始,沒啥原因,就是想而已,其他地方也可以,只不過是**的數字改變而已.
public
static boolean find1
(int[
] array ,int target)
int row =0;
int column = array[0]
.length -1;
while
(row < array.length && column >=0)
//比查詢的數大,往前查詢
if(array[row]
[column]
> target)
else
}return
false
;}
第二種方法則是二分法:
[1]二分法查詢適用於資料量較大時,但是資料需要先排好順序(題目中說為遞增函式,滿足)
[2]確定該區間的中間位置k
[3]將查詢的值t與array[k]比較。若相等,查詢成功返回此位置;否則確定新的查詢區域
[4]繼續二分
private
static boolean find2
(int[
] array, int target)
//確定陣列中間數
int left =0;
int right = array.length * array[0]
.length -1;
int col = array[0]
.length;
while
(left <= right)
else
if(value < target)
else
}return
false
;}
關於陣列中間值確定的方法有很多種,我也是查詢了一些大佬們的方法,選了一種能記得下來的方式,至於原理還要再理解一下.不過這個相當於公式,先套用了再說. 劍指offer 陣列查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 暴力查詢 不考慮二維陣列的有序性,兩重迴圈直接遍歷。public class solution ret...
劍指offer之陣列查詢
題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。完成 coding utf 8 class solution array 二維列表 deffind self,target,ar...
劍指offer 查詢
查詢包含,順序查詢,二分查詢,雜湊表查詢和二叉排序樹查詢。一.二分查詢 題目 旋轉陣列的最小數字 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。思路 重點說一下二分查詢法。如果是...