题目:在一个二维数组当中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组
和一个整数,判断数组当中是否含有该整数。
思路:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
每一行递增,如果右上角的数字小于要找的数字,那么这一行所有的数字都小于要找的数字;
每一列递增,如果右上角的数字大于要找的数字,那么这一列所有的数字都大于要找的数字;
bool Find(int* sz, int rows, int columns, int key) { bool found = false; if (sz == NULL || rows <= 0 || columns <= 0) { return found; } if (sz!=NULL && rows> 0 && columns>0) { int row = 0; int column = columns - 1; while (row < rows && column > 0) { if (sz[row*columns + column] == key) { found = true; break; } else if (sz[row*columns + column] > key) //如果右上角的数字大于要找的数字,那么删除此列 { column--; } else//如果右上角的数字小于小于要找的数字,删除此行; { row++; } } } }
完整测试代码:
// FindNumInSZ.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; bool FindNumOnMatrix(int* matrix, int rows, int columns,int number) { bool found = false; if (matrix != NULL && rows > 0 && columns >0) { int row = 0; int column = columns - 1; while (row < rows && column > 0) { if (matrix[row*columns + column] == number) { found = true; break; } else if (matrix[row*columns + column] > number) { --column; } else { ++row; } } return found; } } bool Find(int* sz, int rows, int columns, int key) { bool found = false; if (sz == NULL || rows <= 0 || columns <= 0) { return found; } if (sz!=NULL && rows> 0 && columns>0) { int row = 0; int column = columns - 1; while (row < rows && column > 0) { if (sz[row*columns + column] == key) { found = true; break; } else if (sz[row*columns + column] > key) //如果右上角的数字大于要找的数字,那么删除此列 { column--; } else//如果右上角的数字小于小于要找的数字,删除此行; { row++; } } } } int _tmain(int argc, _TCHAR* argv[]) { int sz[] = {1,2,8,9, 2,4,9,12, 4,7,10,13, 6,8,11,15 }; bool b = FindNumOnMatrix(sz,4,4,2); cout<<b<<endl; bool c = Find(sz,4,4,2); cout<<c<<endl; getchar(); return 0; }
二维数组可以尝试左上角,右上角,左下角,右下角等特殊的地方开始进行思考!
时间: 2024-10-09 18:09:25