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

解析:二维数组已经排序,从左向右,从上到下递增。

如果二维数组不为空,从第一行依次向下开始查询,如果行不为空,比较目标值与对应行的首尾节点,如果大于头节点,小于尾节点,就在行中依次查询

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

break与continue的用法:
break:
1)结束当前整个循环。忽略循环体中任何其它语句和循环条件测试。
2)只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。
continue:
1)终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。 

2)终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句。他只能结束循环中的一次过程,但不能终止循环继续进行

当然啦,除了从第一行查到最后一行,从最后一行查到第一行也是同样的道理,代码如下:

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

方法二:从矩阵的右上角开始查找,当目标大于该点元素时,向下运动(行号加 1),当目标小于该点元素时,向左运动(列号减 1),目标等于该点元素,返回 true,当列号小于0,或者行号大于等于总行数,意味着找不到,返回 false。

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int row = array.size();
        int col = array[0].size();
        int i = 0, j = col-1;
        while (i < row && j >= 0) {
            if (array[i][j] == target)
                return true;
            else if (array[i][j] > target)
                j = j-1;
            else
                i = i+1;
        }
        return false;
    }
};