How do I search for a number in a 2d array sorted left to right and top to bottom?

后端 未结 20 1101
暖寄归人
暖寄归人 2020-11-22 13:03

I was recently given this interview question and I\'m curious what a good solution to it would be.

Say I\'m given a 2d array where all the numbers i

20条回答
  •  北荒
    北荒 (楼主)
    2020-11-22 13:15

    I think Here is the answer and it works for any kind of sorted matrix

    bool findNum(int arr[][ARR_MAX],int xmin, int xmax, int ymin,int ymax,int key)
    {
        if (xmin > xmax || ymin > ymax || xmax < xmin || ymax < ymin) return false;
        if ((xmin == xmax) && (ymin == ymax) && (arr[xmin][ymin] != key)) return false;
        if (arr[xmin][ymin] > key || arr[xmax][ymax] < key) return false;
        if (arr[xmin][ymin] == key || arr[xmax][ymax] == key) return true;
    
        int xnew = (xmin + xmax)/2;
        int ynew = (ymin + ymax)/2;
    
        if (arr[xnew][ynew] == key) return true;
        if (arr[xnew][ynew] < key)
        {
            if (findNum(arr,xnew+1,xmax,ymin,ymax,key))
                return true;
            return (findNum(arr,xmin,xmax,ynew+1,ymax,key));
        } else {
            if (findNum(arr,xmin,xnew-1,ymin,ymax,key))
                return true;
            return (findNum(arr,xmin,xmax,ymin,ynew-1,key));
        }
    }
    

提交回复
热议问题