1、二维数组中的查找

来源:互联网 发布:节目单制作软件 编辑:程序博客网 时间:2024/06/11 15:05

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

时间限制:1秒 空间限制:32768K

Ⅰ我的笨方法
思路:其实还是双层循环遍历二维数组,每次判断当前行的第一个和最后一个,不在范围内的话判断下一行。

代码:

class Solution {public:    bool Find(int target, vector<vector<int> > array) {        if(array.empty() || array[0].empty())            return false;        int m = array.size();        int n = array[0].size();                if(target < array[0][0] || target > array[m-1][n-1])            return false;        for(int i = 0;i < m;i++){            if(array[i][0] > target || array[i][n-1] < target)                continue;            for(int j = 0;j < n;j++){                if(array[i][j]==target)                    return true;                if(array[i][j] > target)                    break;            }        }       return false;         }};

Ⅱ 巧方法
思路:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时,右移。要查找数字比左下角数字小时,上移。

代码:

class Solution {public:    bool Find(int target, vector<vector<int> > array) {        if(array.empty() || array[0].empty())            return false;        int m = array.size();        int n = array[0].size();                if(target < array[0][0] || target > array[m-1][n-1])            return false;        int i,j;        for(i = m-1,j = 0;i >= 0 && j < n;){            if(array[i][j]==target)                return true;            if(array[i][j] < target){                j++;                continue;            }            if(array[i][j] > target){                i--;                continue;            }        }        return false;         }};
0 0
原创粉丝点击