1.题目描述

2.解题思路
分析:
先遍历第一行找到第一个比target大的前一个数,如果没有就从右上角开始
向下找,找到大于target的数,回退列
向下找,重复
找到target直接return
3.代码
cpp
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){
//先遍历第一行找到第一个比target大的前一个数,如果没有就从右上角开始
//向下找,找到大于target的数,回退列
//向下找,重复
//找到target直接return
int row = matrixSize;
int col = matrixColSize[0];
int idx;//保存遍历起点
if(row==1 && col==1 && matrix[0][0]!=target){
return false;
}
for(int j =0 ;j<=col-1;j++){
if(matrix[0][j]==target){
return true;
}else if(matrix[0][j]>target){
idx = j-1;
break;
}
idx = j;
}
int i = 0;//遍历行的下标
while(idx>=0 && i<=row-1){
if(matrix[i][idx]>target){//如果下面的大于target
i--;
idx--;
}else if(matrix[i][idx]<target){
i++;
}else{
return true;
}
}
return false;
}