面試題4:二維陣列的查詢
阿新 • • 發佈:2018-12-18
題目
在一個二維陣列中,每一行按照從左到右遞增的順序排序,每一列按照從上到下進行排序。求:輸入這樣一個二維陣列和一個整數,判斷陣列中是否有該整數。
#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);