劍指offer 二維陣列中的查詢 一題多解

2021-09-29 23:33:36 字數 1178 閱讀 1656

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

方法一:暴力法

思路:遍歷二維陣列,若有相等的值則返回true,遍歷結束沒有相等的值則返回false。

時間複雜度:o(n2)

空間複雜度:o(1)

public class solution 

for(int i = 0; i < array.length; i++) }}

return false;

}}

方法二:從左下找(從右上找)

思路:從左下開始找,座標上側都小於當前值,座標右側都大於當前值。若當前值大於目標值則向上走,若當前值小於目標值則向右走。找到則返回true,超出陣列邊界則返回false。

時間複雜度:o(n)

空間複雜度:o(1)

public class solution 

int row = array.length-1;//目標行維度

int col = 0;//目標列維度

int rows = 0;//行維度上邊界

int cols = array[0].length-1;//列維度右邊界

while(row >= rows && col <= cols) else if(value > target) else

}return false;

}}

方法三:二分查詢

思路:對於陣列的每一行進行二分查詢,是暴力法的一種優化。

時間複雜度:o(nlogn)

空間複雜度:o(1)

public class solution 

for(int i = 0; i < array.length; i++)

if(target > array[i][array[0].length-1])

int left = 0;

int right = array[0].length-1;

while(left <= right) else if(array[i][mid] > target) else }}

return false;

}}

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