劍指Offer 二維陣列中的查詢

2022-01-28 23:18:45 字數 921 閱讀 9820

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

拋開二維陣列的有序性質,直接遍歷二維陣列找是否含有乙個數,演算法複雜度為\(o(n^2)\)

bool find(int target, vector> array) }}

return false;

}

二位陣列的每一行都是遞增的,可以對每一行進行二分查詢,演算法複雜度為\(o(nlogn)\)

bool find(int target, vector> array) 

else if (target > array[i][mid]) else }}

return false;

}

考慮到二維陣列的列也是有序的,選擇乙個初始點,與target比較

> target, 則target在該初始點左上

< target, 則target在該初始點右下

只有左下和右上兩個點才能作為起始點,其他點會導致移動的方向不確定(如以v[0][0]為初始點時,當v[0][0] < target,target可能在同一行右邊,也可能在下面的某行中)

用這種方法,每次可以使問題的規模減少一行或者一列,找到array[p][q]需要p+q+1次

bool find(int target, vector> array) 

else if (array[row][col] > 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 思路有三種,...