劍指Offer 二維陣列的查詢

2021-08-09 20:57:32 字數 848 閱讀 8597

題目:

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

思路:

題目給定二維陣列按行遞增,按列遞增。

1. (錯誤)有一種很自然的想法就是分別按行和列定位,細想一下這是不行的:例如按行定位時,目標元素大於第5行行首元素,小於第6行行首元素,僅僅只能確定元素在第0行到第6行,並不能鎖定在某行;並且有可能該元素大於所有的行首元素,無法確定具體資訊,列也是同理。

2. (錯誤)從左上角開始遍歷,若目標元素大於當前元素則可向右查詢,也可向下查詢,顯然行不通。

3. (正確)從左下角開始遍歷,當前元素是該列最大值,因此若目標元素大於當前元素,則向右繼續查詢;若目標元素小於當前元素,則向上查詢。這樣就保證了僅有一條查詢路徑。

4. (正確)同理,我們可以從右上角開始查詢,道理同3。

注意:並沒說二維陣列是乙個矩陣,也就是說並不是規則的正方形,每行都有相同元素值;很可能出現,[[1,2,3],,]類似情況,因此需要考慮陣列越界的問題。

**如下:

#include

#include

#include

#include

using

namespace

std;

bool find(int target,vector

>

array)

return (target==current)? true:false;

}int main()

}; cout

<1, v)0;}

二維陣列查詢(劍指offer)

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解法一 因為每一行都是遞增的,直接對每一行進行二分查詢即可。public class solution if ...

劍指offer 二維陣列的查詢

題目描述 書中第三題 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。public class solution return false 要自己處理輸入的版本 public sta...

《劍指offer》二維陣列的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。定義乙個這樣的陣列 比如查詢數字7,我們先用右上角的數字進行比較,7 10,說明7在10這列的左邊,因此剔除掉...