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

Posted ocpc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找74. 搜索二维矩阵相关的知识,希望对你有一定的参考价值。

题目:

技术图片

 

 

 

解答:

按杨氏矩阵的方法求解,时间复杂度为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. 搜索二维矩阵的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode: 74. 搜索二维矩阵(二分查找)

[LeetCode] 74. 搜索二维矩阵 ☆☆☆(二分查找)

Leetcode No.74 搜索二维矩阵(二分查找)

LeetCode74. 搜索二维矩阵

LeetCode74. 搜索二维矩阵

[leetcode] 74. 搜索二维矩阵