1. 程式人生 > >劍指offer——二維陣列中的查詢

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

原題在牛客網的劍指offer試題集裡,提交也是用牛客網的線上答題

題目描述

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

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {

    }
};
我的思路

說實在的我被題目撂倒了,一開始我是想從左上角進行判斷來找數字,就是比較大小來進行移動,但我發現,這樣右移或者下移都是變大的,這樣就很難進行移動了,因為會錯過可能的數值。

我想了想覺得用遍歷感覺太低效了,就來看看牛客們的品論,而點贊第一的思路就讓我恍然大悟。

其實從左下角還是右上角進行判斷移動都是可以的,因為數值變大或者變小的方向都是固定的,這樣移動過得行和列裡是不會有查詢的數字的,這樣就好判斷多了!

程式碼
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int rowNum=array.size();
        int colNum=array[0].size();
        int
i=rowNum-1; int j=0; while(i>=0&&j<colNum){ if(array[i][j]<target){ j++; } else if(array[i][j]==target){ return true; } else{ i--; } } return
false; } };