[劍指Offer] 二維數組中的查找

題目

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

分析

如果選擇在中間選擇一個數與target進行比較並以矩形的方式拓展搜索範圍,如果不相等,那麼剩下的搜索範圍就會有重疊,所以這種方案比較難以繼續往下分析。

於是,根據數組的排列特點,選擇右上角或左下角的數與target進行比較。

假設選擇右上角的數,如果相等,那麼就搜索到了;如果比target大,那麼就捨棄當前這個數所在的列;如果比target小,那麼就捨棄當前這個數所在的行。 以此來減小搜索範圍。

【補充】

vector表示的二維數組,例如:vector<vector<int> > vec,

  • 判斷vec對象是否爲空的方法:vec.empty();
  • 獲取行的方式:vec.size();
  • 獲取列的方式:vec[0].size()。

代碼

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        bool found = false;
        if(array.empty() || array.size() == 0) return found;
        int rows = array.size();//獲取二維數組的行數
        int columns = array[0].size(); //獲取二維數組的列數
        int row = 0;
        int column = columns - 1;
        while(row < rows && column >= 0) {
            if(array[row][column] == target) {
                found = true;
                break;
            } else if(array[row][column] > target) {
                --column;
            } else {
                ++row;
            }
        }
        return found;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章