解題思路
先找 row 再找 column 的 binary search 版本
明明題目本身很簡單,卻卡在某些 edge case 上面好久.....
程式碼
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int left = 0, right = matrix.size() - 1, mid = 0;
// find which row
while (left <= right) {
mid = (left + right) / 2;
if (matrix[mid][0] <= target && (mid == matrix.size()-1 || target < matrix[mid+1][0]))
break;
if (matrix[mid][0] > target)
right = mid - 1;
else
left = mid + 1;
}
// find which column
left = 0, right = matrix[0].size() - 1;
int row = mid;
while (left <= right) {
mid = (left + right) / 2;
if (matrix[row][mid] == target)
return true;
if (matrix[row][mid] > target)
right = mid - 1;
else
left = mid + 1;
}
return false;
}
};
沒有留言:
張貼留言