搜索二维矩阵_leetcode_74
题目描述:在一个每行升序,下一行首元素大于本行末元素的矩阵,查找目标元素是否存在;
分析:就是一个数组查找元素存在的函数,不过查找范围变成的二维数组;
先对每一行首元素进行二分查找,找到目标范围,再对该行进行二次二分查找,判断元素是否存在;
代码:
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){
int Head=0;
int Tail=matrixSize-1;
int Mid;
bool re=0;
while(Head<=Tail){
if(matrix[Head][0]<=target && matrix[Head][*matrixColSize-1]>=target){
int H=0;
int T=*matrixColSize-1;
while(H<=T){
if(matrix[Head][H]==target){
re=1;
break;
}else if(matrix[Head][T]==target){
re=1;
break;
}else{
if(matrix[Head][(H+T)/2]<target){
H=(H+T)/2;
T--;
}else{
T=(H+T)/2;
H++;
}
}
}
break;
}else if(matrix[Tail][0]<=target &&matrix[Tail][*matrixColSize-1]>=target){
int H=0;
int T=*matrixColSize-1;
while(H<=T){
if(matrix[Tail][H]==target){
re=1;
break;
}else if(matrix[Tail][T]==target){
re=1;
break;
}else{
if(matrix[Tail][(H+T)/2]<target){
H=(H+T)/2;
T--;
}else{
T=(H+T)/2;
H++;
}
}
}
break;
}else{
Mid=(Head+Tail)/2;
if(matrix[Mid][0]<target){
Head=Mid;
Tail--;
}else{
Tail=Mid;
Head++;
}
}
}
return re;
}
执行用时: 4 ms
内存消耗: 6 MB
浙公网安备 33010602011771号