在一個(gè) R 行 C 列的二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序郑原。請(qǐng)完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù)夜涕,判斷數(shù)組中是否含有該整數(shù)犯犁。
解析:這是一個(gè)越往右下角數(shù)字越大的數(shù)組。那么我們可以從左下角或者右上角開(kāi)始尋找女器。如果該數(shù)字小于要找的數(shù)字酸役,那就往右找,不然就往上找驾胆。如果超出了數(shù)組的邊界了還沒(méi)找到涣澡,那就是沒(méi)有這個(gè)數(shù)字。
答案:
//時(shí)間復(fù)雜度為 O(R+C)丧诺,空間復(fù)雜度為 O(1)
bool Find(const int* matrix, const int rows, const int columns, const int number)
{
if (nullptr==matrix || rows<=0 || columns<=0) return false;
int r=rows-1, c=0;
while (r>=0 && c<columns)
{
int pos = r*columns+c;
if (matrix[pos]==number) return true;
if (matrix[pos]>number) --r;
else ++c;
}
return false;
}