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

二维数组中的查找

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

二维数组中的查找

1.穷举法(每行单指针)

public:
/*
形如[[1,2],[3,4]]的数组
取其列数,即第一维的size:array[0].size(),
取其行数,即整个array的size:array.size()
然后自array[0][0]遍历
*/
    bool Find(int target, vector<vector<int> > array) {
        int col=array[0].size();//矩阵列数
        int row=array.size();//矩阵行数
        if(!col||!row){return false;}
        else
        {
            for(int i=0;i<row;i++)
            {
                int j=0;
                while(array[i][j]<target)
                {
                    j++;
                }
                if(array[i][j]==target)return true;
                continue;//该行没有目标值,到下一行
            }
        }
        return false;//找不到答案
    }
};

2.二分法(每行左右指针)

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int col=array[0].size();//矩阵列数
        int row=array.size();//矩阵行数
        if(!col||!row){return false;}
        else
        {
            for(int i=0;i<row;i++)
            {
                if(array[i][0]> target)return false;
                if(array[i][0]== target)return true;
                if(array[i][col-1]== target)return true;
                int low=0,high=col-1;
                int mid=(high+low)/2;
                while(low<mid)
                {
                    if(array[i][mid]==target) return true;
                    if(array[i][mid]<target)//小于目标,右移指针
                    {
                        low=mid;
                        mid=(low+high)/2;
                    }
                    else//大于目标,左移
                    {
                        high=mid;
                        mid=(low+high)/2;
                    }
                }
            }
        }
        return false;//找不到答案
    }
};
全部评论

相关推荐

02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务