二分查找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. 搜索二维矩阵的主要内容,如果未能解决你的问题,请参考以下文章