题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:从左下或右上开始查找,每次排除一行或者一列。
#include <iostream>
using namespace std;
bool findnum(int *matrix, int row, int col, int num) {
bool found = false;
//从右上角开始寻找
if (matrix != NULL && row > 0 && col > 0) {
int i = 0;
int j = col - 1;
while (i < row && j >= 0) {
if (num == *((matrix + i) + j)) {
found = true;
break;
} else if (num > *((matrix + i) + j))
++i;
else
--j;
}
}
return found;
}
int main(int argc, char const *argv[]) {
int mat[4][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
int *matrix = &mat[0][0];
// int *matrix = NULL;
bool found = findnum(matrix, 4, 4, 1);
if (found)
cout << "Found it!" << endl;
else
cout << "Not found!" << endl;
return 0;
}