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