题目描述:

 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例 1:

输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true

示例 2:

输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false

要完成的函数:

bool searchMatrix(vector<vector<int>>& matrix, int target)

说明:

1、这道题给定一个m行n列的矩阵,要求编写一个高效的算法来判断矩阵中是否含有target这个元素。

如果存在,返回true,否则返回false。

2、这道题其实就是二分法在矩阵上的应用,整个矩阵是升序的。

我们先用二分法确定target可能会在哪一行,接着再用二分法确定target在哪一列,或者不存在。

代码如下:(附详解)

    bool searchMatrix(vector<vector<int>>& matrix, int target)
{
if(matrix.size()==0||matrix[0].size()==0)return false;//[]或者[[]]的边界条件
int hang=matrix.size(),lie=matrix[0].size(),left=0,right=hang-1,med,t;
while(left<=right)//二分法判断target在哪一行
{
med=(left+right)/2;
if(target<matrix[med][0])
right=med-1;
else if(target>matrix[med][lie-1])
left=med+1;
else//找到元素在med这一行了
{
t=med;
left=0;
right=lie-1;
while(left<=right)//用二分法找到target在哪一列
{
med=(left+right)/2;
if(matrix[t][med]==target)//找到了返回true
return true;
else if(target<matrix[t][med])
right=med-1;
else
left=med+1;
}
return false;//target大于当前行最后一个元素或者小于第一个元素,返回false
}
}
return false;//target小于矩阵的第一行第一个元素,或者大于矩阵最后一行最后一个元素,返回false
}

上述代码实测8ms,beats 97.83% of cpp submissions。

最新文章

  1. win10用户文件夹重命名,启用administrator账户,删除文件夹时提示找不到该项目
  2. php基础复习(3)文件上传于下载
  3. 如何在solution中添加一个test case
  4. bzoj 3594 [Scoi2014]方伯伯的玉米田(DP+二维BIT)
  5. ECSHOP模糊分词搜索和商品列表关键字飘红功能
  6. interactive_timeout
  7. Jupyter Notebook通过latex输出pdf
  8. Hook任务栏时钟窗口(原理其实很简单,就是注入DLL到时钟窗口进程(explorer.exe))
  9. Bag标签成一条线的代码来实现中国字
  10. 如何通过Mock API提高APP开发效率?
  11. Django基本命令
  12. urllib.error
  13. 学习python的第二天
  14. JAVA Web实时消息后台服务器推送技术---GoEasy
  15. [Database] 不知道表名和字段查找值=1234的数据.
  16. angular js 初学
  17. POJ3204 Ikki&#39;s Story I - Road Reconstruction
  18. asp.net core session的使用
  19. python的time模块
  20. Daily Scrum NO.5

热门文章

  1. 团队作业7——alpha阶段之事后诸葛亮分析
  2. jfinal框架教程
  3. 数据结构(c语言版)文摘
  4. mongodb-win32-i386-3.0.6 使用常见错误
  5. 如何打开Tango的ADF文件?
  6. Monocular Visual-Inertial Odometry单目视觉惯性里程计
  7. (连通图 缩点 强联通分支)Popular Cows -- poj --2186
  8. 使用Git 管理heroku的项目(windows)
  9. 如何把asp.net上的服务在iis调试
  10. Mybatis 模糊查询 like【笔记】Could not set parameters for mapping