【面試題】二維數組的查找


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

解題思路:從二維數組的右上角的元素開始判斷,因為此元素是它所在行的最大數,是它所在的列的最小數。如果它等於要查找的數字,則查找過程結束。如果它大於要查找的數字,則可以排除它所在的列。如果它小於要查找的數字,則可排除它所在的行。這樣如果要查找的數字不在數組的右上角,則每次判斷都可以排除一行或一列以縮小查找范圍,直到找到要查找的數字,或者查找范圍為空。

下圖是在二維數組中查找7的示意圖:

參考代碼:

// 二維數組matrix
// 每一行都從左到右遞增排序
// 每一列都從上到下遞增排序
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;
}

【學習資料】 《劍指Offer》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM