劍指offer之二維陣列中的查詢

2021-08-22 19:40:26 字數 1324 閱讀 9673

之前寫過一些劍指offer的題目,但是遇到vector的時候都會跳過因為並不清楚vector容器到底是個什麼,前幾天在對vector進行簡單的了解之後,理解不是很深刻,但是可以使用vector來做題了。

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

之前我們在正常的陣列中寫過一次這種題,

簡單來說將二維陣列假設成乙個正方形,那麼最小的資料在二維陣列的左上角,最大的資料在二維陣列的右下角,並且箭頭指向的方向資料都是遞增的,但是如果你說我要比右上角和左下角誰大,這個是不確定的。

vector中給我們封裝了很多的函式,我們直接拿過來使用就可以了。

之前我的部落格中對一些常用的函式進行了簡單的介紹,在做這些題的時候基本足夠使用了。

我們現在用的思路是,我們讓我們傳入的元素和我們二維陣列中的右上角和左下角兩個元素中的乙個來比較

也就是讓我們傳入的元素首先和1位置或者2位置其中乙個比較,兩個隨便選乙個就可以。

假如我們這裡讓傳入的元素和右上角的元素進行比較也就是1位置。

假如我們這個傳入的元素比我們1位置的資料小,那他一定不在1位置這一列一定在他左邊的列裡邊,這次位置就縮小了,

這時候我們尋找的範圍就是紅色區域了,這時候我們繼續讓紅色框中右上角和傳入的元素比較,如果還是小那就像剛剛一樣繼續縮小列,如果說我現在傳入的元素比右上角的資料大了,那就說明,想要尋找的資料一定不在當前1位置所在的這一行,因為當前1位置是這一行中最大的資料,那這時候範圍就要讓行向下縮小。

如果元素比1位置要大的話尋找資料的區域就變成了藍色框中的位置。

也就是說如果當前資料比1位置大那就讓行++,如果說比1位置小那就讓列——,否則那就是找到了,如果到了行或者列其中乙個超過邊界了,那就說明我們的資料不在當前區域中。

class solution 

else}}

return false;//退出迴圈之後說明範圍內沒有這個資料那就返回錯誤的值。

}};

劍指offer之二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右的遞增順序排序,每一列都按照從上到下的遞增順序排序。完成乙個函式,輸入這樣乙個二維陣列和乙個整數,判斷陣列中是否有該整數。1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 演算法 首先選取陣列中右上角的數字,如果該數字等於要查詢的數...

41 劍指Offer之二維陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。很明顯,由於該二維陣列上到下遞增,左到右遞增的特殊性,遍歷整個矩陣進行查詢不是該題目的意圖所在。總結規律我們可...

Java演算法 劍指offer 二維陣列中的查詢

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方案一 這個是最暴力的直接遍歷。public class maintest return false 方案二 利用二維陣列由上到下,由...