发布于 2014-09-22 09:35:08 | 292 次阅读 | 评论: 0 | 来源: 网友投递
			百度(Baidu)中文搜索引擎
百度(Nasdaq简称:BIDU)是全球最大的中文搜索引擎,2000年1月由李彦宏、徐勇两人创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。		
本文是一道百度的算法笔试题:二维矩阵查找 ,感兴趣的同学参考下。
题目:
有这样一个二维矩阵A[N][N],满足j < k时, 1)a[i][j] < a[i][k]; 2)a[j][i] < a[k][i](其实就数据从左上角到右下角纵横方向上都递减),给定一个数target,如何快速搜索是否在这个矩阵中,是的话输出二维坐标,否则输出Null;(不妨假设数据不重复)
比如
12 34 56 78 90 96
13 35 57 79 91 97
14 36 58 80 93 98
15 37 59 81 94 99
16 38 60 82 95 120
17 39 61 83 100 123
查找 60,输出<4,2>
做法:从左下角开始遍历矩阵,也就是令i = n - 1, j = 0,如果(i, j)的值比查找值大,则i--,如果小则j++,如果相等,则找到。
代码:
    void find(int array[][6], int n, int target)  
    {  
            int i = n - 1, j = 0;  
            while(i >= 0 && j < n)  
            {  
                    if(array[i][j] == target)  
                    {  
                            cout << '(' << i << ',' << j << ')' << endl;  
                            return;  
                    }  
                    else if(array[i][j] > target)  
                            i--;  
                    else j++;  
            }  
                    cout << "NULL\n";  
    }  
结果:
12
(0,0)
34
(0,1)
56
(0,2)
78
(0,3)
99
(3,5)
123
(5,5)
11
NULL