搜索二维矩阵_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