劍值offer66題之每日一題——第一題

題目描述:

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

思路:利用二維數組由上到下,由左到右遞增的規律,那麼選取右上角或者左下角的元素a[row][col]與target進行比較,當target小於元素a[row][col]時,那麼target必定在元素a所在行的左邊,即col--;當target大於元素a[row][col]時,那麼target必定在元素a所在列的下邊,即row++;

代碼實現:

bool Find(int target, vector<vector<int> > array) {
        if(array.size()!=0)
        {
            int row=0;//行從0行開始
            int col=array[0].size()-1;//列從每一行的行尾開始比較
            while(row<array.size()&&col>=0)
            {
                if(target==array[row][col])
                {
                    return true;//找到
                }
                else if(target<array[row][col])
                {
                    col--;//當target小於元素a[row][col]時,那麼target必定在元素a所在行的左邊
                          
                }
               else row++;//當target大於元素a[row][col]時,那麼target必定在元素a所在列的下邊
                
            } 
        }
        return false;
    }

 

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