1. 程式人生 > >劍指offer第1題

劍指offer第1題

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

思路一:

/*  矩陣是有序的,從左下角來看,向上數字遞減,向右數字遞增,* 因此從左下角開始查詢,當要查詢數字比左下角數字大時。右移* 要查詢數字比左下角數字小時,上移*/

時間複雜度為O(m+n)

class Solution {

public:
    bool Find(vector<vector<int> > array,int target) {
        int rowCount = array.size();
        int colCount = array[0].size();
        int i,j;
        for(i=rowCount-1,j=0;i>=0&&j<colCount;)
        {
            if(target == array[i][j])
                return true;
            if(target < array[i][j])
            {
                i--;
                continue;
            }
            if(target > array[i][j])
            {
                j++;
                continue;
            }
        }
        return false;
    }
};

思路二:

每行進行二分查詢,時間複雜度為O(mlogn)