leetcode - 240. 搜索二维矩阵 II
题目
![在这里插入图片描述](https://img-blog.csdnimg.cn/b70a87f0c229499e870594907d2cbb1c.png)
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool binarySearch(vector<int> nums, int target){
int left = 0, right = nums.size() - 1;
int mid;
while(left <= right){
mid = left + (right - left) / 2;
if(nums[mid] == target){
return true;
}else if(nums[mid] < target){
left = mid + 1;
}else if(nums[mid] > target){
right = mid - 1;
}
}
return false;
}
bool searchMatrix1(vector<vector<int> >& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
for(int i = 0; i <m; i++){
if(binarySearch(matrix[i], target)){
return true;
}
}
return false;
}
bool searchMatrix2(vector<vector<int> >& matrix, int target) {
int m = matrix.size();
for(int i = 0; i <m; i++){
if(std::find(matrix[i].begin(), matrix[i].end(), target) != matrix[i].end()){
return true;
}
}
return false;
}
bool binSearch(vector<vector<int> >& matrix, int target, int j, int m){
int top = 0, bottom = m - 1, mid;
while(top <= bottom){
mid = top + (bottom - top) / 2;
if(matrix[mid][j] == target){
return true;
}else if(matrix[mid][j] < target){
top = mid + 1;
}else if(matrix[mid][j] > target){
bottom = mid -1;
}
}
return false;
}
bool searchMatrix(vector<vector<int> >& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int col = n - 1;
for(int j = 0; j < n; j++){
if(matrix[0][j] == target){
return true;
}else if(matrix[0][j] < target){
col = j;
}else{
break;
}
}
for(int i = 0; i <= col; i++){
if(matrix[m-1][i] == target){
return true;
}else if(matrix[m-1][i] < target){
continue;
}else{
if(binSearch(matrix, target, i, m)){
return true;
}
}
}
return false;
}
int main(){
int m, n, target;
bool res;
cin>>m>>n>>target;
vector<vector<int> > matrix(m, vector<int>(n));
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cin>>matrix[i][j];
}
}
res = searchMatrix(matrix, target);
if(res){
cout<<"true";
}else{
cout<<"false";
}
return 0;
}