文章目录
leetcode74:74. 搜索二维矩阵
题目描述
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
Example
输入:matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
solution idea
遍历查找
class Solution {
/*
** 遍历搜索
*/
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()) return false;
int m=matrix.size(),n=matrix[0].size();
bool tag=false;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(matrix[i][j]==target)
{
tag=true; break;break;
}
}
return tag;
}
};
二分查找
m x n
矩阵可以视为长度为m x n
的有序数组。
- 转换关系:
row = idx // n
,col = idx % n
class Solution {
/*
** 二分查找
*/
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()) return false;
int m=matrix.size(),n=matrix[0].size();
int row,col,left=0,right=m*n-1,mid;
while(left<=right)
{
mid=(left+right)/2;
row=mid/n;
col=mid%n;
if(matrix[row][col]==target) return true;
else if(matrix[row][col]<target) left=mid+1;
else right=mid-1;
}
return false;
}
};
参考文献
- c++ prime 第5版