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

       问题描述: 

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


 
 

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

      解决方案:

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

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

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

      总结:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值