LeetCode: Search a 2D Matrix
2014-10-28 15:08
302 查看
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
Given target =
Round 2:
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int l = 0, r = matrix.size()-1;
while(l <= r)
{
int mid = (l+r)/2;
if(matrix[mid][0] == target)
return true;
else if(target >= matrix[mid][0] && target <= matrix[mid][matrix[0].size()-1])
{
l = 0, r = matrix[0].size()-1;
while(l <= r)
{
int mid2 = (l+r) /2;
if(matrix[mid][mid2] == target)
return true;
else if(matrix[mid][mid2] < target)
l = mid2+1;
else
r = mid2-1;
}
return false;
}
else if(matrix[mid][0] > target)
{
r = mid-1;
}
else
{
l = mid+1;
}
}
return false;
}
};
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target =
3, return
true.
class Solution { public: bool searchMatrix(vector<vector<int> > &matrix, int target) { int m = matrix.size(); if(m == 0) return false; return binarySearch(0, m-1, target, matrix); } private: bool binarySearch(int start, int end, int target, vector<vector<int> > &matrix) { if(start > end) return false; int mid = (start+end)/2; if(target <= matrix[mid].back() && target >= matrix[mid].front()) { return binarySearch2(0, matrix[mid].size()-1, target, matrix[mid]); } else if(target < matrix[mid].front()) { return binarySearch(start, mid-1, target, matrix); } else { return binarySearch(mid+1, end, target, matrix); } } bool binarySearch2(int start, int end, int target, vector<int> &row) { if(start > end) return false; int mid = (start + end)/2; if(target == row[mid]) return true; else if(target < row[mid]) return binarySearch2(start, mid-1, target, row); else { return binarySearch2(mid+1, end, target, row); } } };
Round 2:
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int l = 0, r = matrix.size()-1;
while(l <= r)
{
int mid = (l+r)/2;
if(matrix[mid][0] == target)
return true;
else if(target >= matrix[mid][0] && target <= matrix[mid][matrix[0].size()-1])
{
l = 0, r = matrix[0].size()-1;
while(l <= r)
{
int mid2 = (l+r) /2;
if(matrix[mid][mid2] == target)
return true;
else if(matrix[mid][mid2] < target)
l = mid2+1;
else
r = mid2-1;
}
return false;
}
else if(matrix[mid][0] > target)
{
r = mid-1;
}
else
{
l = mid+1;
}
}
return false;
}
};
相关文章推荐
- Leetcode: Search a 2D Matrix
- leetcode---Search a 2D Matrix
- Search a 2D Matrix -- LeetCode
- LeetCode(74) Search a 2D Matrix
- leetcode 74. Search a 2D Matrix
- LeetCode: Search a 2D Matrix
- [leetcode]74. Search a 2D Matrix -- JavaScript 代码
- Leetcode: Search a 2D Matrix 理解分析
- Search a 2D Matrix -- leetcode
- [leetcode] 74. Search a 2D Matrix
- LeetCode——Search a 2D Matrix
- LeetCode:Search a 2D Matrix
- 【LEETCODE】74-Search a 2D Matrix [Python]
- Leetcode 二分查找 Search a 2D Matrix
- leetcode第一刷_Search a 2D Matrix
- Leetcode[74]-Search a 2D Matrix
- [LeetCode] 74 Search a 2D Matrix(二分查找)
- Leetcode: Search a 2D Matrix
- [LeetCode][JavaScript]Search a 2D Matrix
- [LeetCode] 74. Search a 2D Matrix