劍指offer 二維陣列中的查詢

2021-10-01 14:29:23 字數 1075 閱讀 3780

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

解題思路:

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 思路有三種,...