2维有序数组中查找一个数K的问题

来源:互联网 发布:软件设计师辅导书 编辑:程序博客网 时间:2024/05/07 15:37

       问题描述: 

在一个2维有序数组(N*N)中查找一个值为K。  其数组的描述如下图:


  

     其中:行递增序列,列也是递增序列。

      解决方案:

1:刚开始想到了败者树来查找,发现有点大才小用。并且时间效率也不是很高,败者树主要是来做多路归并或是未排序的数组的一个查找过程。这样的时间复杂度也得O(N*logN);

2:老老实实一行一行地2分查找也就O(N*logN);

3:仔细观察这个数组后,我们可以这样处理,先对a[i][i]数组进行2分查找,存在返回其位置,不存在返回其最近的比K小的位置POS。此时仅需对图中标红的一行一列进行2分查找即可。其时间复杂度为O(logN);

      总结:

本来是个很简单的题,非得要开始去想到什么败者树干什么?简单的方法去完成即可。


原创粉丝点击