您的位置:首页 > 其它

[LeetCode] Search a 2D Matrix

2014-11-06 15:33 239 查看
class Solution {
public://先找行,再找列 时间复杂度O(logn + logm)
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int i = row(matrix,target);
if(i == -1)
return false;
bool res = find(matrix[i],target);
return res;
}
int row(vector<vector<int> > &matrix,int target){
int n = matrix.size();
int first = 0,end = n - 1,mid;
while(first <= end){
mid = (first + end)/2;
if(matrix[mid][0] <= target){
if((mid < n - 1 && target < matrix[mid + 1][0]) || mid == n - 1)
return mid;
else
first = mid + 1;
}
else if(matrix[mid][0] > target)
end = mid - 1;
}
return -1;
}
bool find(vector<int> &A,int target){
int n = A.size();
int first = 0,end = n - 1,mid;
while(first <= end){
mid = (first + end)/2;
if(A[mid] == target)
return true;
else if(A[mid] > target)
end = mid - 1;
else
first = mid + 1;
}
return false;
}
};

方法2:

class Solution {
public://时间复杂度O(n + m)
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int i = 0, j = matrix[0].size() - 1;

while (i < matrix.size() && j >= 0)
{
if (target == matrix[i][j])
return true;
else if (target < matrix[i][j])
j--;
else
i++;
}

return false;
}
};
关于此问题的讨论 http://leetcode.com/2010/10/searching-2d-sorted-matrix.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: