剑指offer面试题:二维数组中的查找

来源:互联网 发布:环保数据采集传输仪 编辑:程序博客网 时间:2024/06/05 06:06

二维数组中的查找


题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

 






完整代码及测试用例:

#include<iostream>using namespace std;// 二维数组matrix中,每一行都从左到右递增排序// 每一列都从上到下递增排序bool Find(int* matrix, int rows, int cols, int number){bool found = false;if (matrix != NULL&&rows > 0 && cols > 0){int row = 0, col = cols - 1;while (row<rows&&col>=0){if (matrix[row*cols + col] == number){found = true;break;}else if(matrix[row*cols + col] > number){--col;}else{++row;}}}return found;}// ====================测试代码====================void Test(char* testName, int* matrix, int rows, int cols, int number, bool expected){if (testName != NULL){cout << testName << " begins: ";}bool result = Find(matrix, rows, cols, number);if (result == expected){cout << "Passed." << endl;}else{cout << "Failed." << endl;} }void Test1(){//  1   2   8     9//  2   4   9    12//  4   7   10  13//  6   8   11  15// 要查找的数在数组中int matrix[4][4] = { { 1, 2, 8, 9 },{ 2, 4, 9, 12 },{ 4, 7, 10, 13 },{ 6, 8, 11, 15 } };Test("Test1", (int*)matrix, 4, 4, 7, true);}void Test2(){//  1   2   8   9//  2   4   9   12//  4   7   10  13//  6   8   11  15// 要查找的数不在数组中int matrix[][4] = { { 1, 2, 8, 9 },{ 2, 4, 9, 12 },{ 4, 7, 10, 13 },{ 6, 8, 11, 15 } };Test("Test2", (int*)matrix, 4, 4, 5, false);}void Test3(){//  1   2   8   9//  2   4   9   12//  4   7   10  13//  6   8   11  15// 要查找的数是数组中最小的数字int matrix[][4] = { { 1, 2, 8, 9 },{ 2, 4, 9, 12 },{ 4, 7, 10, 13 },{ 6, 8, 11, 15 } };Test("Test3", (int*)matrix, 4, 4, 1, true);}void Test4(){//  1   2   8   9//  2   4   9   12//  4   7   10  13//  6   8   11  15// 要查找的数是数组中最大的数字int matrix[][4] = { { 1, 2, 8, 9 },{ 2, 4, 9, 12 },{ 4, 7, 10, 13 },{ 6, 8, 11, 15 } };Test("Test4", (int*)matrix, 4, 4, 15, true);}void Test5(){//  1   2   8   9//  2   4   9   12//  4   7   10  13//  6   8   11  15// 要查找的数比数组中最小的数字还小int matrix[][4] = { { 1, 2, 8, 9 },{ 2, 4, 9, 12 },{ 4, 7, 10, 13 },{ 6, 8, 11, 15 } };Test("Test5", (int*)matrix, 4, 4, 0, false);}void Test6(){//  1   2   8   9//  2   4   9   12//  4   7   10  13//  6   8   11  15// 要查找的数比数组中最大的数字还大int matrix[][4] = { { 1, 2, 8, 9 },{ 2, 4, 9, 12 },{ 4, 7, 10, 13 },{ 6, 8, 11, 15 } };Test("Test6", (int*)matrix, 4, 4, 16, false);}void Test7(){// 鲁棒性测试,输入空指针Test("Test7", NULL, 0, 0, 16, false);}int main(){Test1();Test2();Test3();Test4();Test5();Test6();Test7();system("pause");return 0;}

运行结果:

Test1 begins: Passed.

Test2 begins: Passed.

Test3 begins: Passed.

Test4 begins: Passed.

Test5 begins: Passed.

Test6 begins: Passed.

Test7 begins: Passed.

请按任意键继续. . .

0 0