发布于 2014-09-22 09:35:08 | 283 次阅读 | 评论: 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



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务