在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
解題思路:
1.暴力解法:因為每一行是從大到小,所以在遍歷每一行時,可以使用折半查詢。平均複雜度為o(nlogm)
2.簡單解法:我們先分析題目,把二維陣列在紙上畫成乙個矩形。列如:1 2 8 9
2 4 9 12
4710 13
6 8 11 15
然後從陣列中選取乙個數字7。
如果我們從左上角(也就是2)開始查詢,一直到終點右下角(也就是15)。當選取的數字跟要查詢的數字相等時,結束。當選取的數字小於要查詢的數字時,要查詢的數字應該在當前選取數字的右邊或者下邊。當選取的數字大於要查詢的數字時,要查詢的數字應該在當前選取數字的左邊或者上邊。這種情況有可能會出現重疊區域,游標到某處會往回走的現象,**不太容易實現。
我們可以換種角度思考,減少查詢的範圍,我們每次都以右上角的數字作為標準進行比較,當查詢的數字小於右上角的數字時,剔除該數字所在的這一列。當查詢的數字大於右上角的數字時,剔除該數字所在的這一行。慢慢的減少查詢的範圍,最終找到該數字。平均複雜度為o(n+m)
**實現如下:
public class subject_1 ,,,
,};
boolean find = find(0, array);
system.out.println(find);
} public static boolean find(int target, int array) else if (target < position)
j--;
else
} return find;
}}
劍指offer 二維陣列中查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和一 個整數,判斷陣列中是否含有該整數。public class solution 因為陣列每一行都按照從左到右遞增的順序排序,每一列都按照從上到下...
劍指offer 二維陣列中查詢
從今天開始每天一題,除了節假日。在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution return false class solut...
劍指offer 二維陣列中查詢
要求如下 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 示例如下 7,1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 思路有三種,...