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

二维数组中的查找

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;//找不到答案
    }
};
全部评论

相关推荐

Jcwemz:找实习千万别学性能和ui(入门找工作也不用学太多),老老实实把项目需求分析提测试点,跟进测试流程,提bug,填bug表单,出现bug怎么处理,这几个入门的玩意搞明白,实习就有人要你了
0经验如何找实习?
点赞 评论 收藏
分享
ros275229:社团删了吧,cf因该1200才勉强入门吧,也删了,你可以写算法刷了多少道,都比这个好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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