首页 > 其他 > 详细

【二分查找】74. 搜索二维矩阵

时间:2020-05-05 13:08:03      阅读:50      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

 

解答:

按杨氏矩阵的方法求解,时间复杂度为O(m+n),其中m为矩阵的行数,n为矩阵的列数。

 1 class Solution {
 2 public:
 3     bool searchMatrix(vector<vector<int>>& matrix, int target) 
 4     {
 5         if(matrix.empty() || matrix[0].empty())
 6         {
 7             return false;
 8         }
 9 
10         //从左下角上->右上角寻找目标值
11         int x = matrix.size() - 1;
12         int y=0;
13         
14         while(x >= 0 && y < matrix[0].size())
15         {
16             if (matrix[x][y] > target)
17             {
18                 x--;//[x,y]的值比目标值大,上移
19             }
20             else if(matrix[x][y]<target)
21             {
22                 y++;//[x,y]的值比目标值小,右移
23             }
24             else
25             {
26                 return true;
27             }
28         }
29         return false;
30     }
31 };

 

方法二:二分查找。

标准的二分查找模板,将二维矩阵拖为一维矩阵,然后就是一个有序的一维数组了,利用二分查找就行。

 1 class Solution {
 2 public:
 3     
 4     bool searchMatrix(vector<vector<int>>& matrix, int target) 
 5     {
 6         if(matrix.empty() || matrix[0].empty())
 7         {
 8             return 0;
 9         }
10 
11         int left = 0;
12         int right = matrix.size() * matrix[0].size() - 1;
13 
14         int n = matrix[0].size();
15 
16         while(left <= right)//循环结束的条件为区间内没有元素了
17         {
18             int mid = left + ((right - left) >> 1);
19 
20             if(matrix[mid/n][mid%n] > target)
21             {
22                 right = mid - 1;
23             }
24             else if(matrix[mid/n][mid%n] < target)
25             {
26                 left = mid + 1;
27             }
28             else 
29             {
30                 return true;
31             }
32         }
33         return false;
34     }
35 };

 

【二分查找】74. 搜索二维矩阵

原文:https://www.cnblogs.com/ocpc/p/12830189.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!