leetCode74. 搜索二维矩阵
二分法模板:见到背过就行
// 区间[L,R]被划分为[L,mid]和[mid + 1, R]时使用这个模板
int bsearch_1(int l, int r){while(l < r){int mid = l + r >> 1;if(check(mid)) r = mid; //check()判断mid是否满足性质else l = mid + 1;}return l;
}// 区间[L,R]被划分为[L,mid - 1]和[mid, R]时使用这个模板
int bsearch_2(int l, int r){while(l < r){int mid = l + r + 1 >> 1; // 加1进行补偿:原因是当mid = left会陷入死循环(记住即可)if(check(mid)) l = mid; //check()判断mid是否满足性质else r = mid - 1;}return l;
}
题目思路:
代码
class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {// 力扣特殊:对空数组的特判if(matrix.empty() || matrix[0].empty() ) return false;int n = matrix.size(), m = matrix[0].size();int left = 0, right = n * m - 1;while(left < right){int mid = left + right >> 1;if(matrix[mid / m][mid % m] >= target) right = mid;else left = mid + 1;}return matrix[left / m][left % m] == target;}
};