您的位置:首页 > 其它

最大子矩阵 滴滴打车2016笔试

2015-09-25 22:06 274 查看
题目原意:求一矩阵中最大的2*2矩阵(元素和最大)的和。

样例输入:1 2 0 3 4;2 3 4 5 1; 1 1 5 3 0

样例输出:17

简析:此题目直接用暴力枚举即可,算法复杂度为O(n*m)。但题目难度在于如何从规定的输入流中获取这个矩阵。以下是我的代码:

#include<vector>

#include<iostream>

#include<utility>

using namespace std;

vector<vector<int> >matrix;

int inputOnLine(vector<int> &in)

{

    char buf = 0;

    int x;

    while (1)

    {

        buf = getchar();                          //取出输入流第一个字符

        if ((buf != ';') && (buf != 10))

        {

            cin.putback(buf);     //不是‘;’或者回车就放回输入流,因为这是矩阵的数据

            cin >> x;

            in.push_back(x);

        }

        else

            break;

    }

    if (buf != ';')

        return -1;                    //最后一行输入以回车键结束

    else

        return 0;                   //中间行以‘;’结束

    

}

int get2t2Sun(int r, int c)

{

    return matrix[r][c] + matrix[r][c + 1] + matrix[r + 1][c] + matrix[r + 1][c + 1];

}

int main()

{

    int row = 0, colnum = 0,sum=0,buf;

    do

    {

        matrix.push_back(vector<int>());

        colnum=inputOnLine(matrix[row++]);

    } while (colnum != -1);

    colnum = matrix[0].size();

    for (int i = 0; i < row - 1; i++)

    {

        for (int j = 0; j < colnum - 1; j++)

        {

            buf = get2t2Sun(i, j);

            if (sum < buf)

                sum = buf;

        }

    }

     

    cout << sum;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: