13.搜索二维矩阵 II

搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

示例 1:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
示例 2:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false
思路:为了提升查找的速率一般要用折半查找,先对第一行进行折半查找,如果没有找到那么根据折半的特性最后一次比较的数一定是小于目标值的最大数,假设为a,那么再根据该二维数组的特性可知在下一行的同一位置元素b的值一定是大于a,目标元素只可能出现在b的前面,假设b前一个元素是c,如果c是大于目标的那么目标才有可能在该行,若小于则必然不可能在该行找到便可以直接跳过,到下一行。直到找到合适的行再进行折半查找若没有找到再重复以上步骤,

#include<iostream>
using namespace std;
int mk[][5]={1,4,7,11,15,2,5,8,12,19,3,6,9,16,22,10,13,14,17,24,18,21,23,26,30};
bool searchMatrix(int m,int n,int t);
int main()
{
    cout<<searchMatrix(5,5,15);
    return 0;
}
bool searchMatrix(int m,int n,int t)
{
   int i=0,a=0,b=n-1,c=(a+b)/2;
   while(i<m)
   {
      if(mk[i][a]<=t && mk[i][b]>=t)
      {
         while(a<=b)
        {
           if(t<mk[i][c])
           {
              b=c-1;
              c=(a+b)/2;
           }
           else if(t>mk[i][c])
           {
              a=c+1;
              c=(a+b)/2;
           }
           else
             return true;
        }
        a=0;
        b=c;
      }
      else
        i++;
   }
   return false;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值