1. 程式人生 > >面試題4:二維陣列的查詢

面試題4:二維陣列的查詢

題目

在一個二維陣列中,每一行按照從左到右遞增的順序排序,每一列按照從上到下進行排序。求:輸入這樣一個二維陣列和一個整數,判斷陣列中是否有該整數。

#include <cstdio>

bool FindNumber(int* numbers, int rows, int cols, int number)
{
	if(numbers == nullptr)
		return false;

	int row = 0;
	int col = cols - 1;
    
    while(row  < rows && col >= 0)
    {
    	if(number == numbers[row * cols + col])
    		return true;
    	else if(number < numbers[row * cols + col])
    		col--;
    	else
    		row++;


    }
    return false;
}

int main()
{
	int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
	bool out = false;
	out = FindNumber((int*) matrix, 4, 4, 7);
	//out = 1 為找到
	printf("%d\n", out);
}

疑惑:關於二維陣列轉化為一維陣列 本來matrix為二維陣列,使用強制轉換(int*)matrix後,就變成了一維陣列 如果沒有加(int*)會報如下錯誤: error: cannot convert ‘int ()[4]’ to 'int’ for argument ‘1’ to ‘bool FindNumber(int*, int, int, int)’ out = FindNumber( matrix, 4, 4, 7);