题解 | #二维数组中的查找#

二维数组中的查找

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param target int整型 
 * @param array int整型二维数组 
 * @param arrayRowLen int array数组行数
 * @param arrayColLen int* array数组列数
 * @return bool布尔型
 */
bool Find(int target, int** array, int arrayRowLen, int* arrayColLen ) {
    // write code here
    if ((*arrayColLen) == arrayRowLen && arrayRowLen== 0)
    {
        return false;
    }
    int left = 0;
    int right = (*arrayColLen) - 1;
    int top = 0;
    int tail = arrayRowLen - 1;
    int lmid = (left + right) / 2;
    int rmid = (top + tail) / 2;
    

    while(left < right)
    {

        if (array[0][lmid] < target)
        {
            left = lmid + 1;
            lmid = (left + right) / 2;
        }
        else if(array[0][lmid] > target)
        {
            right = lmid - 1;
            lmid = ((left + right) / 2); 
        }
        else 
        {
            return true;
        }
    }

    if (array[0][right] > target)
    {
        right--;
    }
   
    while(right >= 0)
    {
        top = 0;
        tail = arrayRowLen - 1;
        rmid = (top + tail) / 2;
        while(top < tail)
        {
            if (array[rmid][right] < target)
            {
                top = rmid + 1;
                rmid = (top + tail) / 2;
            }
            else if (array[rmid][right] > target)
            {
                tail = rmid - 1;
                rmid = (top + tail) / 2;
            }
            else 
            {
                return true;
            }
        }
        if (top == tail && array[top][right] == target)
        {
            return true;
        }
        if (right > 0 && array[arrayRowLen-1][right-1] < target)
        {
            return false;
        }
        right--;
    }
    

    return false;
}

全部评论

相关推荐

哞客37422655...:嫡系回归,buff叠满!好好干,等你们组明年把你当嫡长继承人的时候再请我们喝奶茶~
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务