面試題3:二維數組中的尋找,試題二維數組

來源:互聯網
上載者:User

面試題3:二維數組中的尋找,試題二維數組
面試題3:二維數組中的尋找

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

例如下面的二維數組就是每行、每列都遞增排序。如果在這個數組中尋找數字7,則返回true;如果尋找數字5,由於不含有該數字,則返回false。
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15

解題思路:首先選取數組中右上方的數字。如果該數字等於要尋找的數字,尋找過程結束;如果該數字大於要尋找的數字,剔除這個數字所在的列;如果該數字小於要尋找的數字,剔除這個數字所在的行。也就是說如果要尋找的數字不在數組的右上方,則每一次都在數組的尋找範圍中剔除一行或者一列,這樣每一步都可以縮小尋找的範圍,直到找到要尋找的數字,或者尋找範圍為空白。

把整個尋找過程分析清楚之後,我們再寫代碼就不是一件很難的事情了。下面是上述思路對應的代碼:

bool Find(int* matrix, int rows, int columns, int number){    bool found = false;    if(matrix != NULL && rows > 0 $$ columns >0)    {        int row = 0;        int column = columns - 1;        while(row < rows && column >= 0)        {            if(matrix[row * columns + column] == number)            {                found = true;                break;            }            else if(matrix[row * columns + column] > number)                --column;            else                ++row;        }        return found;    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.