554. Brick Wall

来源:互联网 发布:外交部流氓回答知乎 编辑:程序博客网 时间:2024/06/05 00:19

我的天,提交了好几次,终于AC了,可怕的题目。。

分布操作
1、找每条边可选的路径
2、找所有可能的分割点【减少筛选的数量】

class Solution {public:    int func(int start, vector<set<int>>& paths){        int sum=0;        for(int i=0;i<paths.size();i++)        {            if((paths[i].find(start)==paths[i].end()))                sum++;        }        return sum;    }    int leastBricks(vector<vector<int>>& wall) {        vector<set<int>> paths;        for(int i=0;i<wall.size();i++)        {            set<int> temp;            int sum=0;            for(int j=0;j<wall[i].size()-1;j++){                sum+=wall[i][j];                temp.insert(sum);            }            paths.push_back(temp);        }        int wholePath = 0;        for(int i=0;i<wall[0].size();i++)            wholePath+=wall[0][i];        set<int> possiblePath;        for(int i=0;i<wall.size();i++)        {            int sum=0;            for(int j=0;j<wall[i].size()-1;j++){                sum+=wall[i][j];                possiblePath.insert(sum);            }        }        if(possiblePath.empty())            return wall.size();        int minBreak=INT_MAX;        for(set<int>::iterator it= possiblePath.begin();it != possiblePath.end();it++)        {            int breakTime = func(*it, paths);            minBreak=minBreak<breakTime?minBreak:breakTime;        }        return minBreak;    }};