劍指offer:二維數組中的查找

參考:http://www.07net01.com/2015/07/874135.html

描述

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

解法

這是一道考查二維數組的理解和編程能力的題。

在二維數組在內存中是連續存儲的。在內存中從上到下存儲各行元素,在同一行中按照從左到右存儲。

因此可以按照行號和列號來計算出相對數組首部的位置。

由於每一行 和 每一列都是有序的,因此,我們可以拿要查找的數與數組的右上角的數進行比較。

因爲每一行從左到右遞增,每一列從上到下遞增。
所以查找一個數num,可以這樣做:
首先拿num與右上角的數進行比較。
若相等,則直接返回,找到該數。
若num < 右上角數,則剔除右上角數所在列 col–
若num > 右上角數,則剔除右上角數所在行 row++

有了這個思路,我們就可以進行寫代碼了。

其實,還可以選擇與左下角的數進行比較。方法與上述跟右上角數比較一樣。

code

class Solution {
public:
    bool Find(vector<vector<int> > array,int target) {
        bool found = false;
        int row = array.size();
        int col = array[0].size();

        if(!array.empty() && row > 0 && col > 0){

            int crow = 0, ccol = col - 1;

            while(crow < row && ccol >= 0){
                if(array[crow][ccol] == target){
                    return true;
                }
                else if(array[crow][ccol] > target)
                    --ccol;
                else
                    ++crow;
            }
        }
        return false;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章