积少成多

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有这个整数?

1    2    8  9
2    4    9    12
4    7    10    13
6    8    11    15

 

思路:查找7

从右上角的数组开始判断:9>7,又因为每一列从上到下递增,所以这一列淘汰

1    2    8  9
2    4    9    12
4    7    10    13
6    8    11    15

 

接着第三列也被排除

1    2    8  9
2    4    9    12
4    7    10    13
6    8    11    15

 

现在右上角为2<7

那么把2所在的行排除掉了    

1    2    8  9
2    4    9    12
4    7    10    13
6    8    11    15

=========

又因为4<7,将4所在的行排除

1    2    8  9
2    4    9    12
4    7    10    13
6    8    11    15

===========

最后右上角的数字就是7了,找到了,返回。

=========

代码:

class Offer{
public:
    bool find_matrix(vector<vector<int> > matrix,int target){
        int cloums = matrix.size();//hang shu
        if(cloums ==0){
            return false;
        }
        int rows = matrix[0].size();//lie shu

        int c = 0;
        int r = rows-1;
        while(r>=0 && c<=cloums-1){
            if(matrix[c][r]==target){
                cout<<"matrix["<<c<<"]["<<r<<"]"<<endl;
                return true;
            }
            else if(matrix[c][r] > target) r--;
            else c++;
        }
        return false;
    }
};

 

posted on 2016-06-23 20:03  x7b5g  阅读(192)  评论(0编辑  收藏  举报