文章标题

来源:互联网 发布:蔡司三坐标编程 编辑:程序博客网 时间:2024/06/08 18:20

今天看了《剑指Offer》的面试题3,还是很有收获的。题目是一个二维数组,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
初看的时候,我也是看得云里雾里。但是当作者将思路引导了右上角的时候,顿时就有豁然开朗的感觉。正是因为每一行从左到右依次递增,每一行从上到下依次递增,这样的话,抓住右上角的数字与待查找数字进行比较,就相当于抓住了“牛鼻子”。若右上角数字等于待查找数字,那再好不过了,直接返回true就是了;若右上角数字大于待查找数字,那么就知道,右上角数字的这一列的每一个数都比待查找数字大(因为右上角数字本身就是所在列的最小值),所以这一列就可以排除掉了;若右上角数字小于待查找数字,那么右上角数字的所在行就可以被排除掉了(因为右上角数字本身就是所在行的最大值)。
这样的思路理清楚了之后,就好办了,代码就是书中给的代码了:
bool Find(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(column>=0&&row

0 0
原创粉丝点击