【手把手带你刷LeetCode】——08.搜索二维矩阵

举报
安然无虞 发表于 2022/05/26 23:04:46 2022/05/26
【摘要】 【前言】 今天是力扣打卡第八天! 时间过得好快呀,一转眼又是一年立冬,铁汁们记的保暖哦。 原题:搜索二维矩阵 题目描述: 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 ...

【前言】

今天是力扣打卡第八天!

时间过得好快呀,一转眼又是一年立冬,铁汁们记的保暖哦

原题:搜索二维矩阵

题目描述:

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

【注意】:也就是说,整个二维矩阵都是升序的。

示例1: 


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

 示例2:


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

题解: 

 

 【敲黑板】:其实这道题目的重点就在于:一维索引和二维索引间的互换

代码执行:


  
  1. bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){
  2. //考虑特殊情况
  3. if(matrix == NULL || matrixSize == 0){
  4. return false;
  5. }
  6. int row = matrixSize;//行数,这里需要注意一下
  7. int col = *matrixColSize;//列数
  8. //将二维索引化解成一维索引
  9. int left = 0;
  10. int right = row * col - 1;
  11. int mid = 0;
  12. int element = 0;
  13. while(left <= right){
  14. mid = left + (right - left) / 2;
  15. element = matrix[mid / col][mid % col];//将一维索引转化成二维索引,实际上使用的还是二维索引
  16. if(element > target){
  17. right = mid - 1;
  18. }else if(element < target){
  19. left = mid + 1;
  20. }else{
  21. return true;
  22. }
  23. }
  24. return false;
  25. }

复杂度分析 :

时间复杂度:O(logM*N), M和N分别是矩阵的行数和列数

空间复杂度:O(1)

结语:

今天是力扣打卡第8天!

坚持住哦,定个小目标,先不间断打满100天!!

送你一朵小红花啦!!!

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/121194866

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。