题目:
在一个二维数组中,每一行都按照从左到右的递增顺序排序,每一列都按照从上到下递增顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组是否包含了该整数。
设待查找整数为num
在二维数组中随便找一个数n;
(1)若n=num,则停止寻找;
(2)若n>num,则num位于n的左边或上边;
(3)若n<num,则num位于n的右边或下边;
思路
每次查找右上角的元素,此元素没有位于它右边和上边的元素,即
(1)若n=num,则停止寻找;
(2)若n>num,则num位于n的左边;(新的右上角元素列下标column–)
(3)若n<num,则num位于n的下边;(新的右上角元素行下标row++)
停止寻找条件:找到 或 column<0 或 row>=rows;
源代码:https://github.com/zhedahht/CodingInterviewChinese2/blob/master/04_FindInPartiallySortedMatrix/FindInPartiallySortedMatrix.cpp
bool Find(int* matrix, int rows, int columns, int number)
{
bool found = false;
if(matrix != nullptr && 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;
}