二维数组中的查找

来源:互联网 发布:刷游戏币软件 编辑:程序博客网 时间:2024/05/16 19:33

1、题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

2、代码

(1)从右上角开始查找

bool Find(int target, vector<vector<int> > array){    // -1勿忘    for (int i = 0, j = array[i].size() - 1; i < array.size(), j >= 0;)    {        //向左移动一列        if (array[i][j] > target)            j--;        //向下移动一行        else if (array[i][j] < target)            i++;        else            return true;    }    return false;}

(2)从左下角开始查找

bool Find(int target, vector<vector<int> > array){    // -1勿忘    int i = array.size() - 1, j = 0;    while (i>=0 && j<array[i].size())    {        //向上移动一行        if (array[i][j] > target)            i--;        //向右移动一列        else if (array[i][j] < target)            j++;        else            return true;    }    return false;}

3、思路分析

这里最重要的就是不能从左上角或者是右下角开始比较,因为从这2个角上开始比较一次无法排除一行或者一列的区域。因此,这个题目中只需要保证是从左下或者是右上开始比较的就行。

4、编程注意

(1)在vector的操作中,如果vec的size()是N,那么vec[i]中的i只能取到(N-1),下标是从0开始的,这点很容易出错。在本题目中,比如从左下角开始比较的时候, i = array.size()-1,注意后面的-1别忘记。

原创粉丝点击